diff --git a/.chloggen/codeboten_rm-deprecated-119.yaml b/.chloggen/codeboten_rm-deprecated-119.yaml new file mode 100644 index 00000000000..534da241515 --- /dev/null +++ b/.chloggen/codeboten_rm-deprecated-119.yaml @@ -0,0 +1,25 @@ +# 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. otlpreceiver) +component: mdatagen + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Removing deprecated generated funcs and a few test funcs as well. + +# One or more tracking issues or pull requests related to the change +issues: [12304] + +# (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: + +# 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: [] diff --git a/.chloggen/component-logger-api.yaml b/.chloggen/component-logger-api.yaml new file mode 100644 index 00000000000..02d84010631 --- /dev/null +++ b/.chloggen/component-logger-api.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: 'enhancement' + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: component/componentattribute + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: New module codifies component attributes and provides a zap.Logger for components. + +# One or more tracking issues or pull requests related to the change +issues: [12217] + +# (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: + +# 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/.chloggen/component-logger-memory.yaml b/.chloggen/component-logger-memory.yaml new file mode 100644 index 00000000000..8418f816b87 --- /dev/null +++ b/.chloggen/component-logger-memory.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: memorylimiter + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Logger no longer attributes to single signal, pipeline, or component. + +# One or more tracking issues or pull requests related to the change +issues: [12217] + +# (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: + +# 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: [] diff --git a/.chloggen/component-logger-otlp.yaml b/.chloggen/component-logger-otlp.yaml new file mode 100644 index 00000000000..585fd2d2b2c --- /dev/null +++ b/.chloggen/component-logger-otlp.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: otlpreceiver + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Logger no longer attributes to random signal when receiving multiple signals. + +# One or more tracking issues or pull requests related to the change +issues: [12217] + +# (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: + +# 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: [] diff --git a/.chloggen/component-logger.yaml b/.chloggen/component-logger.yaml new file mode 100644 index 00000000000..4138f09a871 --- /dev/null +++ b/.chloggen/component-logger.yaml @@ -0,0 +1,26 @@ +# 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. otlpreceiver) +component: service + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Align component logger attributes with those defined in RFC + +# One or more tracking issues or pull requests related to the change +issues: [12217] + +# (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: | + See [Pipeline Component Telemetry RFC](https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/rfcs/component-universal-telemetry.md#attributes) + +# 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: [] diff --git a/.chloggen/configauth-remove-default.yaml b/.chloggen/configauth-remove-default.yaml new file mode 100644 index 00000000000..59e0a4c9cd8 --- /dev/null +++ b/.chloggen/configauth-remove-default.yaml @@ -0,0 +1,27 @@ +# 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. otlpreceiver) +component: configauth + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Remove NewDefaultAuthentication + +# One or more tracking issues or pull requests related to the change +issues: [12223] + +# (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: | + The value returned by this function will always cause an error on startup. + In `configgrpc.Client/ServerConfig.Auth`, `nil` should be used instead to disable authentication. + +# 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/.chloggen/configgrpc-noauth-default.yaml b/.chloggen/configgrpc-noauth-default.yaml new file mode 100644 index 00000000000..1244682ea2a --- /dev/null +++ b/.chloggen/configgrpc-noauth-default.yaml @@ -0,0 +1,26 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: configgrpc + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: "Set Auth to nil in NewDefaultClientConfig/NewDefaultServerConfig" + +# One or more tracking issues or pull requests related to the change +issues: [12223] + +# (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: | + The value that was used previously would always cause an error on startup. + +# 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/.chloggen/confignet-omitempty.yaml b/.chloggen/confignet-omitempty.yaml new file mode 100644 index 00000000000..6bdcd831dd8 --- /dev/null +++ b/.chloggen/confignet-omitempty.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: confignet + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Add the `omitempty` mapstructure tag to struct fields + +# One or more tracking issues or pull requests related to the change +issues: [12191] + +# (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: This results in unset fields not being rendered when marshaling. + +# 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/.chloggen/consumer-message.yaml b/.chloggen/consumer-message.yaml new file mode 100644 index 00000000000..fe6c6d7c039 --- /dev/null +++ b/.chloggen/consumer-message.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: consumer + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Clarify that data cannot be accessed after Consume* func is called. + +# One or more tracking issues or pull requests related to the change +issues: [12284] + +# (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: + +# 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/.chloggen/create-confmap-validate.yaml b/.chloggen/create-confmap-validate.yaml new file mode 100644 index 00000000000..bd195645a89 --- /dev/null +++ b/.chloggen/create-confmap-validate.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: new_component + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: xconfmap + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Create the xconfmap module and add the `Validator` interface and `Validate` function to facilitate config validation + +# One or more tracking issues or pull requests related to the change +issues: [11524] + +# (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: + +# 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/.chloggen/deprecate-checkreceivertraces.yaml b/.chloggen/deprecate-checkreceivertraces.yaml new file mode 100644 index 00000000000..1720f94d1ca --- /dev/null +++ b/.chloggen/deprecate-checkreceivertraces.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: deprecation + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: component/componenttest + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Deprecate CheckReceiverTraces in componenenttest + +# One or more tracking issues or pull requests related to the change +issues: [12185] + +# (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: Use the `metadatatest.AssertEqualMetric` series of functions instead of `obsreporttest.CheckReceiverTraces` + +# 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/.chloggen/deprecate-component-validate.yaml b/.chloggen/deprecate-component-validate.yaml new file mode 100644 index 00000000000..d2da4e05266 --- /dev/null +++ b/.chloggen/deprecate-component-validate.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: deprecation + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: component + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Deprecate `ConfigValidator` and `ValidateConfig` + +# One or more tracking issues or pull requests related to the change +issues: [11524] + +# (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: Please use `Validator` and `Validate` respectively from `xconfmap`. + +# 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/.chloggen/disabled-queue.yaml b/.chloggen/disabled-queue.yaml new file mode 100644 index 00000000000..73bd745efbc --- /dev/null +++ b/.chloggen/disabled-queue.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: exporterhelper + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Implement sync disabled queue used when batching is enabled. + +# One or more tracking issues or pull requests related to the change +issues: [12245] + +# (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: + +# 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: [user] diff --git a/.chloggen/enable-pull-based-exporter.yaml b/.chloggen/enable-pull-based-exporter.yaml new file mode 100644 index 00000000000..a0260967cd2 --- /dev/null +++ b/.chloggen/enable-pull-based-exporter.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: exporterhelper + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Enable the new pull-based batcher in exporterhelper + +# One or more tracking issues or pull requests related to the change +issues: [12291] + +# (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: + +# 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: [user] diff --git a/.chloggen/featuregate-command.yaml b/.chloggen/featuregate-command.yaml new file mode 100644 index 00000000000..c3b6dcc1bb4 --- /dev/null +++ b/.chloggen/featuregate-command.yaml @@ -0,0 +1,13 @@ +change_type: enhancement + +component: otelcol + +note: "Add featuregate command to display information about available features" + +issues: [11998] + +subtext: | + The featuregate command allows users to view detailed information about feature gates + including their status, stage, and description. + +change_logs: [user] diff --git a/.chloggen/fix-blocking-queue.yaml b/.chloggen/fix-blocking-queue.yaml new file mode 100644 index 00000000000..641c7b4cd2a --- /dev/null +++ b/.chloggen/fix-blocking-queue.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: exporterqueue + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Fix async queue to propagate cancellation all they way to the queue + +# One or more tracking issues or pull requests related to the change +issues: [12282] + +# (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: + +# 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/.chloggen/fix-concurrent-issue.yaml b/.chloggen/fix-concurrent-issue.yaml new file mode 100644 index 00000000000..5db06b2f27f --- /dev/null +++ b/.chloggen/fix-concurrent-issue.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: exporterhelper + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Fix undefined behavior access to request after send to next component. This causes random memory access. + +# One or more tracking issues or pull requests related to the change +issues: [12281] + +# (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: + +# 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: [user] diff --git a/.chloggen/mx-psi_move-moduleinfo-to-method.yaml b/.chloggen/mx-psi_move-moduleinfo-to-method.yaml new file mode 100644 index 00000000000..f171f0667bf --- /dev/null +++ b/.chloggen/mx-psi_move-moduleinfo-to-method.yaml @@ -0,0 +1,26 @@ +# 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. otlpreceiver) +component: extension + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Remove `extension.Settings.ModuleInfo` + +# One or more tracking issues or pull requests related to the change +issues: [12296] + +# (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: | + - The functionality is now available as an optional, hidden interface on `service`'s implementation of the `Host` + +# 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/.chloggen/mx-psi_remove-metricslevel.yaml b/.chloggen/mx-psi_remove-metricslevel.yaml new file mode 100644 index 00000000000..b378642f1fc --- /dev/null +++ b/.chloggen/mx-psi_remove-metricslevel.yaml @@ -0,0 +1,25 @@ +# 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. otlpreceiver) +component: component + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Remove deprecated field `component.TelemetrySettings.MetricsLevel`. + +# One or more tracking issues or pull requests related to the change +issues: [11061] + +# (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: + +# 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/.chloggen/pprofile-aggregation-constants.yaml b/.chloggen/pprofile-aggregation-constants.yaml new file mode 100644 index 00000000000..3620f40f2d3 --- /dev/null +++ b/.chloggen/pprofile-aggregation-constants.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: pdata/pprofile + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Introduce aggregation temporality constants + +# One or more tracking issues or pull requests related to the change +issues: [12253] + +# (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: + +# 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 new file mode 100644 index 00000000000..5bd138b6b78 --- /dev/null +++ b/.github/ALLOWLIST @@ -0,0 +1,33 @@ +# Code generated by githubgen. DO NOT EDIT. +##################################################### +# +# List of components +# waiting on owners to be assigned +# +##################################################### +# +# 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 + +## DEPRECATED components +# Start deprecated components list + + + +# End deprecated components list + +## UNMAINTAINED components + +# Start unmaintained components list + + + +# End unmaintained components list diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index af25d807cc8..899a72c29c0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,37 +1,78 @@ +# Code generated by githubgen. DO NOT EDIT. ##################################################### # -# List of approvers for OpenTelemetry Collector +# List of codeowners # ##################################################### # -# 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 +# Learn about CODEOWNERS file format: +# https://help.github.com/en/articles/about-code-owners # * @open-telemetry/collector-approvers -# List all maintainers individually so all of them are notified -.github/CODEOWNERS @open-telemetry/collector-approvers @codeboten @BogdanDrutu @dmitryax @mx-psi -docs/rfc @open-telemetry/collector-approvers @codeboten @BogdanDrutu @dmitryax @mx-psi - -confmap/ @open-telemetry/collector-approvers @mx-psi @evan-bradley -exporter/debugexporter @open-telemetry/collector-approvers @andrzej-stencel -exporter/exporterhelper @open-telemetry/collector-approvers @BogdanDrutu @dmitryax -exporter/nopexporter @open-telemetry/collector-approvers @evan-bradley -pdata/ @open-telemetry/collector-approvers @BogdanDrutu @dmitryax -receiver/nopreceiver @open-telemetry/collector-approvers @evan-bradley -service/internal/graph @open-telemetry/collector-approvers @djaglowski -extension/xextension @open-telemetry/collector-approvers @swiatekm - -# Profiling-related modules -pdata/pprofile @open-telemetry/collector-approvers @mx-psi @dmathieu -consumer/xconsumer @open-telemetry/collector-approvers @mx-psi @dmathieu -connector/xconnector @open-telemetry/collector-approvers @mx-psi @dmathieu -exporter/exporterhelper/xexporterhelper @open-telemetry/collector-approvers @mx-psi @dmathieu -exporter/xexporter @open-telemetry/collector-approvers @mx-psi @dmathieu -processor/xprocessor @open-telemetry/collector-approvers @mx-psi @dmathieu -receiver/xreceiver @open-telemetry/collector-approvers @mx-psi @dmathieu +# Start components list + +cmd/mdatagen/ @open-telemetry/collector-approvers @dmitryax +cmd/mdatagen/internal/sampleprocessor/ @open-telemetry/collector-approvers +cmd/mdatagen/internal/samplereceiver/ @open-telemetry/collector-approvers @dmitryax +cmd/mdatagen/internal/samplescraper/ @open-telemetry/collector-approvers @dmitryax +confmap/ @open-telemetry/collector-approvers @mx-psi @evan-bradley +connector/forwardconnector/ @open-telemetry/collector-approvers +connector/xconnector/ @open-telemetry/collector-approvers @mx-psi @dmathieu +consumer/xconsumer/ @open-telemetry/collector-approvers @mx-psi @dmathieu +docs/rfcs/ @open-telemetry/collector-approvers @codeboten @BogdanDrutu @dmitryax @mx-psi +exporter/debugexporter/ @open-telemetry/collector-approvers @andrzej-stencel +exporter/exporterhelper/ @open-telemetry/collector-approvers @BogdanDrutu @dmitryax +exporter/exporterhelper/xexporterhelper/ @open-telemetry/collector-approvers @mx-psi @dmathieu +exporter/exporterqueue/ @open-telemetry/collector-approvers +exporter/nopexporter/ @open-telemetry/collector-approvers @evan-bradley +exporter/otlpexporter/ @open-telemetry/collector-approvers +exporter/otlphttpexporter/ @open-telemetry/collector-approvers +exporter/xexporter/ @open-telemetry/collector-approvers @mx-psi @dmathieu +extension/memorylimiterextension/ @open-telemetry/collector-approvers +extension/xextension/ @open-telemetry/collector-approvers @swiatekm +extension/zpagesextension/ @open-telemetry/collector-approvers +pdata/ @open-telemetry/collector-approvers @BogdanDrutu @dmitryax +pdata/pprofile/ @open-telemetry/collector-approvers @mx-psi @dmathieu +processor/batchprocessor/ @open-telemetry/collector-approvers +processor/memorylimiterprocessor/ @open-telemetry/collector-approvers +processor/processorhelper/ @open-telemetry/collector-approvers +processor/xprocessor/ @open-telemetry/collector-approvers @mx-psi @dmathieu +receiver/nopreceiver/ @open-telemetry/collector-approvers @evan-bradley +receiver/otlpreceiver/ @open-telemetry/collector-approvers +receiver/receiverhelper/ @open-telemetry/collector-approvers +receiver/xreceiver/ @open-telemetry/collector-approvers @mx-psi @dmathieu +scraper/ @open-telemetry/collector-approvers +scraper/scraperhelper/ @open-telemetry/collector-approvers +service/ @open-telemetry/collector-approvers +service/internal/graph/ @open-telemetry/collector-approvers @djaglowski + +# End components list + +##################################################### +# +# List of distribution maintainers +# +##################################################### + +# Start distribution list + +reports/distributions/core.yaml @open-telemetry/collector-approvers +reports/distributions/contrib.yaml @open-telemetry/collector-approvers +reports/distributions/k8s.yaml @open-telemetry/collector-approvers +reports/distributions/otlp.yaml @open-telemetry/collector-approvers + +# End distribution list + +##################################################### +# +## UNMAINTAINED components +# +##################################################### + +# Start unmaintained components list + + + +# End unmaintained components list diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 9211c804bae..00000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -assignees: '' - ---- - -**Describe the bug** - - -**Steps to reproduce** - - -**What did you expect to see?** - - -**What did you see instead?** - - -**What version did you use?** - - -**What config did you use?** - - -**Environment** - - - -**Additional context** - diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 00000000000..d30d55a62ad --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,124 @@ +name: Bug report +description: Create a report to help us improve +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! Please make sure to fill out the entire form below, providing as much context as you can in order to help us triage and track down your bug as quickly as possible. + + Before filing a bug, please be sure you have searched through [existing bugs](https://github.com/open-telemetry/opentelemetry-collector/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Abug) to see if an existing issue covers your bug. + - type: dropdown + id: component + attributes: + label: Component(s) + description: Which component(s) does your bug report concern? + multiple: true + options: + # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` + # Do not manually edit it. + # Start components list + - cmd/mdatagen + - cmd/mdatagen/internal/sampleprocessor + - cmd/mdatagen/internal/samplereceiver + - cmd/mdatagen/internal/samplescraper + - confmap + - connector/forward + - connector/x + - consumer/xconsumer + - docs/rfcs + - exporter/debug + - exporter/exporterhelper + - exporter/exporterhelper/xexporterhelper + - exporter/exporterqueue + - exporter/nop + - exporter/otlp + - exporter/otlphttp + - exporter/x + - extension/memorylimiter + - extension/x + - extension/zpages + - pdata + - pdata/pprofile + - processor/batch + - processor/memorylimiter + - processor/processorhelper + - processor/x + - receiver/nop + - receiver/otlp + - receiver/receiverhelper + - receiver/x + - scraper + - scraper/scraperhelper + - service + - service/internal/graph + # End components list + - type: textarea + attributes: + label: What happened? + description: Please provide as much detail as you reasonably can. + value: | + **Describe the bug** + + + **Steps to reproduce** + + + **What did you expect to see?** + + + **What did you see instead?** + + + validations: + required: true + - type: input + attributes: + label: Collector version + description: What version did you use? (e.g., `v0.4.0`, `1eb551b`, etc) + validations: + required: true + - type: textarea + attributes: + label: Environment information + description: Please provide any additional information about your installation. + value: | + ## Environment + OS: (e.g., "Ubuntu 20.04") + Compiler(if manually compiled): (e.g., "go 14.2") + + - type: textarea + attributes: + label: OpenTelemetry Collector configuration + description: Please provide the configuration you are using (e.g. the YAML config file). + placeholder: | # Empty Collector config + receivers: + exporters: + processors: + extensions: + service: + pipelines: + traces: + receivers: [] + exporters: [] + processors: [] + metrics: + receivers: [] + exporters: [] + processors: [] + logs: + receivers: [] + exporters: [] + processors: [] + render: yaml + - type: textarea + attributes: + label: Log output + description: | + Please copy and paste any relevant log output. + render: shell + - type: textarea + attributes: + label: Additional context + description: Any additional information you think may be relevant to this issue. + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 951330bb93b..00000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: feature request -assignees: '' - ---- - -## Important (read before submitting) -We are currently preparing for the upcoming 1.0 GA release. Feature requests that are not aligned with -the current roadmap and are not aimed at stabilizing and preparing the Collector for the release will -not be prioritized. - -_Delete this paragraph before submitting._ - -**Is your feature request related to a problem? Please describe.** - - -**Describe the solution you'd like** - - -**Describe alternatives you've considered** - - -**Additional context** - - -_Please delete paragraphs that you did not use before submitting._ diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml new file mode 100644 index 00000000000..b1467affb97 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -0,0 +1,70 @@ +name: Feature request +description: Suggest an idea for this project +labels: ["feature request"] +body: + - type: dropdown + id: component + attributes: + label: Component(s) + description: Which component(s) does your feature request concern? + multiple: true + options: + # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` + # Do not manually edit it. + # Start components list + - cmd/mdatagen + - cmd/mdatagen/internal/sampleprocessor + - cmd/mdatagen/internal/samplereceiver + - cmd/mdatagen/internal/samplescraper + - confmap + - connector/forward + - connector/x + - consumer/xconsumer + - docs/rfcs + - exporter/debug + - exporter/exporterhelper + - exporter/exporterhelper/xexporterhelper + - exporter/exporterqueue + - exporter/nop + - exporter/otlp + - exporter/otlphttp + - exporter/x + - extension/memorylimiter + - extension/x + - extension/zpages + - pdata + - pdata/pprofile + - processor/batch + - processor/memorylimiter + - processor/processorhelper + - processor/x + - receiver/nop + - receiver/otlp + - receiver/receiverhelper + - receiver/x + - scraper + - scraper/scraperhelper + - service + - service/internal/graph + # End components list + - type: textarea + attributes: + label: Is your feature request related to a problem? Please describe. + description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]. We are currently preparing for the upcoming 1.0 GA release. Feature requests that are not aligned with the current roadmap and are not aimed at stabilizing and preparing the Collector for the release will + not be prioritized. + validations: + required: true + - type: textarea + attributes: + label: Describe the solution you'd like + description: A clear and concise description of what you want to happen. + validations: + required: true + - type: textarea + attributes: + label: Describe alternatives you've considered + description: A clear and concise description of any alternative solutions or features you've considered. + - type: textarea + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/other.yaml b/.github/ISSUE_TEMPLATE/other.yaml new file mode 100644 index 00000000000..a944ce3475b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/other.yaml @@ -0,0 +1,54 @@ +name: Other issue +description: Create a new issue to help us improve the collector +body: + - type: dropdown + id: component + attributes: + label: Component(s) + description: Which component(s) does your issue concern? + multiple: true + options: + # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` + # Do not manually edit it. + # Start components list + - cmd/mdatagen + - cmd/mdatagen/internal/sampleprocessor + - cmd/mdatagen/internal/samplereceiver + - cmd/mdatagen/internal/samplescraper + - confmap + - connector/forward + - connector/x + - consumer/xconsumer + - docs/rfcs + - exporter/debug + - exporter/exporterhelper + - exporter/exporterhelper/xexporterhelper + - exporter/exporterqueue + - exporter/nop + - exporter/otlp + - exporter/otlphttp + - exporter/x + - extension/memorylimiter + - extension/x + - extension/zpages + - pdata + - pdata/pprofile + - processor/batch + - processor/memorylimiter + - processor/processorhelper + - processor/x + - receiver/nop + - receiver/otlp + - receiver/receiverhelper + - receiver/x + - scraper + - scraper/scraperhelper + - service + - service/internal/graph + # End components list + - type: textarea + attributes: + label: Describe the issue you're reporting + description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + validations: + required: true diff --git a/.github/workflows/api-compatibility.yml b/.github/workflows/api-compatibility.yml index 73045db529a..3859d0a9022 100644 --- a/.github/workflows/api-compatibility.yml +++ b/.github/workflows/api-compatibility.yml @@ -33,7 +33,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 # Generate apidiff states of Main - name: Generate-States diff --git a/.github/workflows/build-and-test-arm.yml b/.github/workflows/build-and-test-arm.yml index 0d4593f55bf..e45f582ce04 100644 --- a/.github/workflows/build-and-test-arm.yml +++ b/.github/workflows/build-and-test-arm.yml @@ -31,7 +31,7 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: "~1.22.11" + go-version: ~1.22.12 cache: false - name: Cache Go id: go-cache diff --git a/.github/workflows/build-and-test-windows.yaml b/.github/workflows/build-and-test-windows.yaml index 50414d75732..5708bc4b2dc 100644 --- a/.github/workflows/build-and-test-windows.yaml +++ b/.github/workflows/build-and-test-windows.yaml @@ -27,7 +27,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 cache: false - name: Cache Go uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 @@ -56,7 +56,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 cache: false - name: Cache Go uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 8a16c780c3d..6887804846f 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -23,7 +23,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 cache: false - name: Cache Go id: go-cache @@ -46,7 +46,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 cache: false - name: Cache Go id: go-cache @@ -70,7 +70,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 cache: false - name: Cache Go id: go-cache @@ -95,7 +95,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 cache: false - name: Cache Go id: go-cache @@ -130,7 +130,7 @@ jobs: - name: Gen otelcorecol run: | make genotelcorecol - git diff -s --exit-code || (echo 'Generated code is out of date, please run "make genotelcorecol" and commit the changes in this PR.' && exit 1) + git diff --exit-code || (echo 'Generated code is out of date, please run "make genotelcorecol" and commit the changes in this PR.' && exit 1) - name: Multimod verify run: make multimod-verify - name: crosslink @@ -200,7 +200,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 cache: false - name: Cache Go id: go-cache @@ -264,7 +264,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 cache: false - name: Cache Go id: go-cache diff --git a/.github/workflows/builder-integration-test.yaml b/.github/workflows/builder-integration-test.yaml index c034e279333..131ecc9fdd7 100644 --- a/.github/workflows/builder-integration-test.yaml +++ b/.github/workflows/builder-integration-test.yaml @@ -35,6 +35,6 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 - name: Test run: make builder-integration-test diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml index 65d61fce8ab..7ba0c716b87 100644 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/changelog.yml @@ -33,7 +33,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 - name: Cache Go id: go-cache uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 @@ -79,7 +79,7 @@ jobs: run: make chlog-preview > changelog_preview.md - name: Link Checker id: lychee - uses: lycheeverse/lychee-action@f796c8b7d468feb9b8c0a46da3fac0af6874d374 + uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 with: args: "--verbose --no-progress ./changelog_preview.md --config .github/lychee.toml" failIfEmpty: false diff --git a/.github/workflows/check-links.yaml b/.github/workflows/check-links.yaml index 1921b2d9913..660b8f1af6a 100644 --- a/.github/workflows/check-links.yaml +++ b/.github/workflows/check-links.yaml @@ -51,7 +51,7 @@ jobs: - name: Link Checker id: lychee - uses: lycheeverse/lychee-action@f796c8b7d468feb9b8c0a46da3fac0af6874d374 + uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 with: args: "--verbose --no-progress ${{needs.changedfiles.outputs.files}} --config .github/lychee.toml" failIfEmpty: false diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index ca4e4ad2da2..bb2f76a5a91 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -25,7 +25,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/contrib-tests.yml b/.github/workflows/contrib-tests.yml index a17952b8b1c..d7097aa4894 100644 --- a/.github/workflows/contrib-tests.yml +++ b/.github/workflows/contrib-tests.yml @@ -44,7 +44,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 cache: false - name: Run Contrib Tests run: | diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 7dc73e000a3..4653fe0094b 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -15,7 +15,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 - name: Run benchmark run: make gobenchmark diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 58b147c68e5..5964e88b147 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -130,7 +130,7 @@ jobs: - name: Setup Go uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 # Prepare Core for release. # - Update CHANGELOG.md file, this is done via chloggen # - Run make prepare-release PREVIOUS_VERSION=1.0.0 RELEASE_CANDIDATE=1.1.0 MODSET=stable diff --git a/.github/workflows/tidy-dependencies.yml b/.github/workflows/tidy-dependencies.yml index 3f4f731efff..b9b2efe198b 100644 --- a/.github/workflows/tidy-dependencies.yml +++ b/.github/workflows/tidy-dependencies.yml @@ -20,7 +20,7 @@ jobs: ref: ${{ github.head_ref }} - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: ~1.22.11 + go-version: ~1.22.12 cache: false - name: Cache Go id: go-cache diff --git a/Makefile b/Makefile index 55c03e8bc9e..97c806bfa20 100644 --- a/Makefile +++ b/Makefile @@ -445,3 +445,18 @@ mdatagen-test: cd cmd/mdatagen && $(GOCMD) install . cd cmd/mdatagen && $(GOCMD) generate ./... cd cmd/mdatagen && $(GOCMD) test ./... + +.PHONY: generate-gh-issue-templates +generate-gh-issue-templates: $(GITHUBGEN) + $(GITHUBGEN) issue-templates + +.PHONY: generate-codeowners +generate-codeowners: $(GITHUBGEN) + $(GITHUBGEN) --default-codeowner "open-telemetry/collector-approvers" codeowners + +.PHONY: gengithub +gengithub: $(GITHUBGEN) generate-codeowners generate-gh-issue-templates + +.PHONY: gendistributions +gendistributions: $(GITHUBGEN) + $(GITHUBGEN) distributions diff --git a/Makefile.Common b/Makefile.Common index c003cfab3d0..17fcc1b287f 100644 --- a/Makefile.Common +++ b/Makefile.Common @@ -30,6 +30,7 @@ CHECKFILE := $(TOOLS_BIN_DIR)/checkfile CHLOGGEN := $(TOOLS_BIN_DIR)/chloggen CROSSLINK := $(TOOLS_BIN_DIR)/crosslink ENVSUBST := $(TOOLS_BIN_DIR)/envsubst +GITHUBGEN := $(TOOLS_BIN_DIR)/githubgen GOFUMPT := $(TOOLS_BIN_DIR)/gofumpt GOIMPORTS := $(TOOLS_BIN_DIR)/goimports GOVULNCHECK := $(TOOLS_BIN_DIR)/govulncheck diff --git a/README.md b/README.md index 0486c47e245..d2223d6716f 100644 --- a/README.md +++ b/README.md @@ -177,9 +177,8 @@ Here is a list of community roles with current and previous members: - Approvers ([@open-telemetry/collector-approvers](https://github.com/orgs/open-telemetry/teams/collector-approvers)): - [Antoine Toulme](https://github.com/atoulme), Splunk - - [Daniel Jaglowski](https://github.com/djaglowski), observIQ - [Evan Bradley](https://github.com/evan-bradley), Dynatrace - - [Juraci Paixão Kröhling](https://github.com/jpkrohling), Grafana Labs + - [Juraci Paixão Kröhling](https://github.com/jpkrohling), OllyGarden - [Tyler Helmuth](https://github.com/TylerHelmuth), Honeycomb - [Yang Song](https://github.com/songy23), Datadog @@ -192,6 +191,7 @@ Here is a list of community roles with current and previous members: - [Rahul Patel](https://github.com/rghetia) - [Steven Karis](https://github.com/sjkaris) - [Anthony Mirabella](https://github.com/Aneurysm9) + - [Daniel Jaglowski](https://github.com/djaglowski) - Maintainers ([@open-telemetry/collector-maintainers](https://github.com/orgs/open-telemetry/teams/collector-maintainers)): diff --git a/client/go.mod b/client/go.mod index bff74308221..eaa215bb934 100644 --- a/client/go.mod +++ b/client/go.mod @@ -22,7 +22,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/client/go.sum b/client/go.sum index edc81fe738b..2b6210da93c 100644 --- a/client/go.sum +++ b/client/go.sum @@ -86,8 +86,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/cmd/builder/go.mod b/cmd/builder/go.mod index 7a2da3f273a..ef774999d1f 100644 --- a/cmd/builder/go.mod +++ b/cmd/builder/go.mod @@ -17,7 +17,7 @@ require ( go.uber.org/goleak v1.3.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 - golang.org/x/mod v0.22.0 + golang.org/x/mod v0.23.0 ) require ( diff --git a/cmd/builder/go.sum b/cmd/builder/go.sum index 4d543e3dfdd..109be10afab 100644 --- a/cmd/builder/go.sum +++ b/cmd/builder/go.sum @@ -51,8 +51,8 @@ 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/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= -golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= +golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/cmd/builder/internal/builder/main_test.go b/cmd/builder/internal/builder/main_test.go index 41c06fea3bb..c4b510036be 100644 --- a/cmd/builder/internal/builder/main_test.go +++ b/cmd/builder/internal/builder/main_test.go @@ -40,8 +40,9 @@ require ( var replaceModules = []string{ "", "/component", - "/component/componenttest", + "/component/componentattribute", "/component/componentstatus", + "/component/componenttest", "/client", "/config/configauth", "/config/configcompression", @@ -53,6 +54,7 @@ var replaceModules = []string{ "/config/configtelemetry", "/config/configtls", "/confmap", + "/confmap/xconfmap", "/confmap/provider/envprovider", "/confmap/provider/fileprovider", "/confmap/provider/httpprovider", diff --git a/cmd/githubgen/allowlist.txt b/cmd/githubgen/allowlist.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cmd/mdatagen/go.mod b/cmd/mdatagen/go.mod index 32921a45a4b..1891451d14b 100644 --- a/cmd/mdatagen/go.mod +++ b/cmd/mdatagen/go.mod @@ -26,7 +26,7 @@ require ( go.opentelemetry.io/otel/trace v1.34.0 go.uber.org/goleak v1.3.0 go.uber.org/zap v1.27.0 - golang.org/x/text v0.21.0 + golang.org/x/text v0.22.0 ) require ( @@ -49,7 +49,6 @@ require ( github.com/spf13/pflag v1.0.5 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/component/componentstatus v0.119.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/consumererror v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.119.0 // indirect @@ -64,7 +63,7 @@ require ( golang.org/x/sys v0.29.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -88,8 +87,6 @@ replace go.opentelemetry.io/collector/semconv => ../../semconv replace go.opentelemetry.io/collector/consumer => ../../consumer -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/receiver/receivertest => ../../receiver/receivertest retract ( diff --git a/cmd/mdatagen/go.sum b/cmd/mdatagen/go.sum index 6a856c78f65..2db16ecd816 100644 --- a/cmd/mdatagen/go.sum +++ b/cmd/mdatagen/go.sum @@ -97,8 +97,8 @@ golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.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.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= 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= @@ -111,8 +111,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/cmd/mdatagen/internal/command.go b/cmd/mdatagen/internal/command.go index c4f2c0098d5..35d6b93757c 100644 --- a/cmd/mdatagen/internal/command.go +++ b/cmd/mdatagen/internal/command.go @@ -76,19 +76,10 @@ func run(ymlPath string) error { tmplDir := "templates" codeDir := filepath.Join(ymlDir, "internal", md.GeneratedPackageName) - if err = os.MkdirAll(codeDir, 0o700); err != nil { - return fmt.Errorf("unable to create output directory %q: %w", codeDir, err) - } - testDir := filepath.Join(ymlDir, "internal", md.GeneratedPackageName+"test") - if err = os.MkdirAll(testDir, 0o700); err != nil { - return fmt.Errorf("unable to create output test directory %q: %w", codeDir, err) - } + toGenerate := map[string]string{} if md.Status != nil { if md.Status.Class != "cmd" && md.Status.Class != "pkg" && !md.Status.NotComponent { - if err = generateFile(filepath.Join(tmplDir, "status.go.tmpl"), - filepath.Join(codeDir, "generated_status.go"), md, "metadata"); err != nil { - return err - } + toGenerate[filepath.Join(tmplDir, "status.go.tmpl")] = filepath.Join(codeDir, "generated_status.go") if err = generateFile(filepath.Join(tmplDir, "component_test.go.tmpl"), filepath.Join(ymlDir, "generated_component_test.go"), md, packageName); err != nil { return err @@ -116,8 +107,11 @@ func run(ymlPath string) error { return fmt.Errorf("unable to remove generated file \"generated_component_telemetry_test.go\": %w", err) } - toGenerate := map[string]string{} if len(md.Telemetry.Metrics) != 0 { // if there are telemetry metrics, generate telemetry specific files + testDir := filepath.Join(ymlDir, "internal", md.GeneratedPackageName+"test") + if err = os.MkdirAll(testDir, 0o700); err != nil { + return fmt.Errorf("unable to create output test directory %q: %w", codeDir, err) + } toGenerate[filepath.Join(tmplDir, "telemetry.go.tmpl")] = filepath.Join(codeDir, "generated_telemetry.go") toGenerate[filepath.Join(tmplDir, "telemetry_test.go.tmpl")] = filepath.Join(codeDir, "generated_telemetry_test.go") toGenerate[filepath.Join(tmplDir, "telemetrytest.go.tmpl")] = filepath.Join(testDir, "generated_telemetrytest.go") @@ -128,24 +122,15 @@ func run(ymlPath string) error { toGenerate[filepath.Join(tmplDir, "documentation.md.tmpl")] = filepath.Join(ymlDir, "documentation.md") } - for tmpl, dst := range toGenerate { - if err = generateFile(tmpl, dst, md, "metadata"); err != nil { - return err + if len(md.Metrics) > 0 || len(md.ResourceAttributes) > 0 { + testdataDir := filepath.Join(codeDir, "testdata") + if err = os.MkdirAll(filepath.Join(codeDir, "testdata"), 0o700); err != nil { + return fmt.Errorf("unable to create output directory %q: %w", testdataDir, err) } - } - if len(md.Metrics) == 0 && len(md.ResourceAttributes) == 0 { - return nil - } - - if err = os.MkdirAll(filepath.Join(codeDir, "testdata"), 0o700); err != nil { - return fmt.Errorf("unable to create output directory %q: %w", filepath.Join(codeDir, "testdata"), err) - } - - toGenerate = map[string]string{ - filepath.Join(tmplDir, "testdata", "config.yaml.tmpl"): filepath.Join(codeDir, "testdata", "config.yaml"), - filepath.Join(tmplDir, "config.go.tmpl"): filepath.Join(codeDir, "generated_config.go"), - filepath.Join(tmplDir, "config_test.go.tmpl"): filepath.Join(codeDir, "generated_config_test.go"), + toGenerate[filepath.Join(tmplDir, "testdata", "config.yaml.tmpl")] = filepath.Join(testdataDir, "config.yaml") + toGenerate[filepath.Join(tmplDir, "config.go.tmpl")] = filepath.Join(codeDir, "generated_config.go") + toGenerate[filepath.Join(tmplDir, "config_test.go.tmpl")] = filepath.Join(codeDir, "generated_config_test.go") } if len(md.ResourceAttributes) > 0 { // only generate resource files if resource attributes are configured @@ -158,6 +143,13 @@ func run(ymlPath string) error { toGenerate[filepath.Join(tmplDir, "metrics_test.go.tmpl")] = filepath.Join(codeDir, "generated_metrics_test.go") } + // If at least one file to generate, will need the codeDir + if len(toGenerate) > 0 { + if err = os.MkdirAll(codeDir, 0o700); err != nil { + return fmt.Errorf("unable to create output directory %q: %w", codeDir, err) + } + } + for tmpl, dst := range toGenerate { if err = generateFile(tmpl, dst, md, md.GeneratedPackageName); err != nil { return err diff --git a/cmd/mdatagen/internal/sampleprocessor/README.md b/cmd/mdatagen/internal/sampleprocessor/README.md index a7729565261..48c23b1e51b 100644 --- a/cmd/mdatagen/internal/sampleprocessor/README.md +++ b/cmd/mdatagen/internal/sampleprocessor/README.md @@ -10,7 +10,7 @@ This processor is used for testing purposes to check the output of mdatagen. | Distributions | [] | | Warnings | [Any additional information that should be brought to the consumer's attention](#warnings) | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector?query=is%3Aissue%20is%3Aopen%20label%3Aprocessor%2Fsample%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector/issues?q=is%3Aopen+is%3Aissue+label%3Aprocessor%2Fsample) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector?query=is%3Aissue%20is%3Aclosed%20label%3Aprocessor%2Fsample%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector/issues?q=is%3Aclosed+is%3Aissue+label%3Aprocessor%2Fsample) | -| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@some](https://www.github.com/some) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | | [development]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/component-stability.md#development [beta]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/component-stability.md#beta diff --git a/cmd/mdatagen/internal/sampleprocessor/metadata.yaml b/cmd/mdatagen/internal/sampleprocessor/metadata.yaml index 521bd62c452..af63fd8e603 100644 --- a/cmd/mdatagen/internal/sampleprocessor/metadata.yaml +++ b/cmd/mdatagen/internal/sampleprocessor/metadata.yaml @@ -15,7 +15,7 @@ status: distributions: [] unsupported_platforms: [freebsd, illumos] codeowners: - active: [some] + active: [] warnings: - Any additional information that should be brought to the consumer's attention diff --git a/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_telemetry.go b/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_telemetry.go index 3e29542e5d3..1e071451579 100644 --- a/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_telemetry.go +++ b/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_telemetry.go @@ -48,16 +48,6 @@ func (tbof telemetryBuilderOptionFunc) apply(mb *TelemetryBuilder) { tbof(mb) } -// Deprecated: [v0.119.0] use RegisterProcessRuntimeTotalAllocBytesCallback. -func WithProcessRuntimeTotalAllocBytesCallback(cb func() int64, opts ...metric.ObserveOption) TelemetryBuilderOption { - return telemetryBuilderOptionFunc(func(builder *TelemetryBuilder) { - builder.observeProcessRuntimeTotalAllocBytes = func(_ context.Context, o metric.Observer) error { - o.ObserveInt64(builder.ProcessRuntimeTotalAllocBytes, cb(), opts...) - return nil - } - }) -} - // RegisterProcessRuntimeTotalAllocBytesCallback sets callback for observable ProcessRuntimeTotalAllocBytes metric. func (builder *TelemetryBuilder) RegisterProcessRuntimeTotalAllocBytesCallback(cb metric.Int64Callback) error { reg, err := builder.meter.RegisterCallback(func(ctx context.Context, o metric.Observer) error { @@ -73,15 +63,6 @@ func (builder *TelemetryBuilder) RegisterProcessRuntimeTotalAllocBytesCallback(c return nil } -// Deprecated: [v0.119.0] use RegisterQueueLengthCallback. -func (builder *TelemetryBuilder) InitQueueLength(cb func() int64, opts ...metric.ObserveOption) (metric.Registration, error) { - reg, err := builder.meter.RegisterCallback(func(_ context.Context, o metric.Observer) error { - o.ObserveInt64(builder.QueueLength, cb(), opts...) - return nil - }, builder.QueueLength) - return reg, err -} - // RegisterQueueLengthCallback sets callback for observable QueueLength metric. func (builder *TelemetryBuilder) RegisterQueueLengthCallback(cb metric.Int64Callback) error { reg, err := builder.meter.RegisterCallback(func(ctx context.Context, o metric.Observer) error { diff --git a/cmd/mdatagen/internal/samplereceiver/internal/metadatatest/generated_telemetrytest.go b/cmd/mdatagen/internal/samplereceiver/internal/metadatatest/generated_telemetrytest.go index f5e2b59abff..d0c9a545955 100644 --- a/cmd/mdatagen/internal/samplereceiver/internal/metadatatest/generated_telemetrytest.go +++ b/cmd/mdatagen/internal/samplereceiver/internal/metadatatest/generated_telemetrytest.go @@ -3,7 +3,6 @@ package metadatatest import ( - "context" "testing" "github.com/stretchr/testify/require" @@ -16,21 +15,6 @@ import ( "go.opentelemetry.io/collector/receiver/receivertest" ) -// Deprecated: [v0.119.0] Use componenttest.Telemetry -type Telemetry struct { - *componenttest.Telemetry -} - -// Deprecated: [v0.119.0] Use componenttest.NewTelemetry -func SetupTelemetry(opts ...componenttest.TelemetryOption) Telemetry { - return Telemetry{Telemetry: componenttest.NewTelemetry(opts...)} -} - -// Deprecated: [v0.119.0] Use metadatatest.NewSettings -func (tt *Telemetry) NewSettings() receiver.Settings { - return NewSettings(tt.Telemetry) -} - func NewSettings(tt *componenttest.Telemetry) receiver.Settings { set := receivertest.NewNopSettings() set.ID = component.NewID(component.MustNewType("sample")) @@ -38,20 +22,6 @@ func NewSettings(tt *componenttest.Telemetry) receiver.Settings { return set } -// Deprecated: [v0.119.0] Use metadatatest.AssertEqual* -func (tt *Telemetry) AssertMetrics(t *testing.T, expected []metricdata.Metrics, opts ...metricdatatest.Option) { - var md metricdata.ResourceMetrics - require.NoError(t, tt.Reader.Collect(context.Background(), &md)) - // ensure all required metrics are present - for _, want := range expected { - got := getMetricFromResource(want.Name, md) - metricdatatest.AssertEqual(t, want, got, opts...) - } - - // ensure no additional metrics are emitted - require.Equal(t, len(expected), lenMetrics(md)) -} - func AssertEqualBatchSizeTriggerSend(t *testing.T, tt *componenttest.Telemetry, dps []metricdata.DataPoint[int64], opts ...metricdatatest.Option) { want := metricdata.Metrics{ Name: "otelcol_batch_size_trigger_send", diff --git a/cmd/mdatagen/internal/samplereceiver/internal/metadatatest/generated_telemetrytest_test.go b/cmd/mdatagen/internal/samplereceiver/internal/metadatatest/generated_telemetrytest_test.go index 573627394cc..d8480bda821 100644 --- a/cmd/mdatagen/internal/samplereceiver/internal/metadatatest/generated_telemetrytest_test.go +++ b/cmd/mdatagen/internal/samplereceiver/internal/metadatatest/generated_telemetrytest_test.go @@ -12,10 +12,11 @@ import ( "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest" "go.opentelemetry.io/collector/cmd/mdatagen/internal/samplereceiver/internal/metadata" + "go.opentelemetry.io/collector/component/componenttest" ) func TestSetupTelemetry(t *testing.T) { - testTel := SetupTelemetry() + testTel := componenttest.NewTelemetry() tb, err := metadata.NewTelemetryBuilder(testTel.NewTelemetrySettings()) require.NoError(t, err) defer tb.Shutdown() @@ -30,77 +31,19 @@ func TestSetupTelemetry(t *testing.T) { tb.BatchSizeTriggerSend.Add(context.Background(), 1) tb.QueueCapacity.Record(context.Background(), 1) tb.RequestDuration.Record(context.Background(), 1) - - testTel.AssertMetrics(t, []metricdata.Metrics{ - { - Name: "otelcol_batch_size_trigger_send", - Description: "Number of times the batch was sent due to a size trigger [deprecated since v0.110.0]", - Unit: "{times}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_process_runtime_total_alloc_bytes", - Description: "Cumulative bytes allocated for heap objects (see 'go doc runtime.MemStats.TotalAlloc')", - Unit: "By", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_queue_capacity", - Description: "Queue capacity - sync gauge example.", - Unit: "{items}", - Data: metricdata.Gauge[int64]{ - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_queue_length", - Description: "This metric is optional and therefore not initialized in NewTelemetryBuilder. [alpha]", - Unit: "{items}", - Data: metricdata.Gauge[int64]{ - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_request_duration", - Description: "Duration of request [alpha]", - Unit: "s", - Data: metricdata.Histogram[float64]{ - Temporality: metricdata.CumulativeTemporality, - DataPoints: []metricdata.HistogramDataPoint[float64]{ - {}, - }, - }, - }, - }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreValue()) - AssertEqualBatchSizeTriggerSend(t, testTel.Telemetry, + AssertEqualBatchSizeTriggerSend(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessRuntimeTotalAllocBytes(t, testTel.Telemetry, + AssertEqualProcessRuntimeTotalAllocBytes(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualQueueCapacity(t, testTel.Telemetry, + AssertEqualQueueCapacity(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualQueueLength(t, testTel.Telemetry, + AssertEqualQueueLength(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualRequestDuration(t, testTel.Telemetry, + AssertEqualRequestDuration(t, testTel, []metricdata.HistogramDataPoint[float64]{{}}, metricdatatest.IgnoreValue(), metricdatatest.IgnoreTimestamp()) diff --git a/cmd/mdatagen/internal/templates/telemetry.go.tmpl b/cmd/mdatagen/internal/templates/telemetry.go.tmpl index e95e6308116..d234a817377 100644 --- a/cmd/mdatagen/internal/templates/telemetry.go.tmpl +++ b/cmd/mdatagen/internal/templates/telemetry.go.tmpl @@ -58,29 +58,6 @@ func (tbof telemetryBuilderOptionFunc) apply(mb *TelemetryBuilder) { } {{- range $name, $metric := .Telemetry.Metrics }} - {{- if $metric.Optional }} -// Deprecated: [v0.119.0] use Register{{ $name.Render }}Callback. -func (builder *TelemetryBuilder) Init{{ $name.Render }}({{ if $metric.Data.Async -}}cb func() {{ $metric.Data.BasicType }}, {{- end }}opts ...metric.ObserveOption) (metric.Registration, error) { - reg, err := builder.meter.RegisterCallback(func(_ context.Context, o metric.Observer) error { - o.Observe{{ casesTitle $metric.Data.BasicType }}(builder.{{ $name.Render }}, cb(), opts...) - return nil - }, builder.{{ $name.Render }}) - return reg, err -} - {{- else }} - {{ if $metric.Data.Async -}} -// Deprecated: [v0.119.0] use Register{{ $name.Render }}Callback. -func With{{ $name.Render }}Callback(cb func() {{ $metric.Data.BasicType }}, opts ...metric.ObserveOption) TelemetryBuilderOption { - return telemetryBuilderOptionFunc(func(builder *TelemetryBuilder) { - builder.observe{{ $name.Render }} = func(_ context.Context, o metric.Observer) error { - o.Observe{{ casesTitle $metric.Data.BasicType }}(builder.{{ $name.Render }}, cb(), opts...) - return nil - } - }) -} - {{- end }} - {{- end }} - {{ if $metric.Data.Async -}} // Register{{ $name.Render }}Callback sets callback for observable {{ $name.Render }} metric. func (builder *TelemetryBuilder) Register{{ $name.Render }}Callback(cb metric.{{ casesTitle $metric.Data.BasicType }}Callback) error { diff --git a/cmd/mdatagen/internal/templates/telemetrytest.go.tmpl b/cmd/mdatagen/internal/templates/telemetrytest.go.tmpl index a5c538af41b..a64c13db330 100644 --- a/cmd/mdatagen/internal/templates/telemetrytest.go.tmpl +++ b/cmd/mdatagen/internal/templates/telemetrytest.go.tmpl @@ -20,22 +20,7 @@ import ( {{- end }} ) -// Deprecated: [v0.119.0] Use componenttest.Telemetry -type Telemetry struct { - *componenttest.Telemetry -} - -// Deprecated: [v0.119.0] Use componenttest.NewTelemetry -func SetupTelemetry(opts ...componenttest.TelemetryOption) Telemetry { - return Telemetry{ Telemetry: componenttest.NewTelemetry(opts...) } -} - {{ if or isConnector isExporter isExtension isProcessor isReceiver isScraper }} -// Deprecated: [v0.119.0] Use {{ .Package }}test.NewSettings -func (tt *Telemetry) NewSettings() {{ .Status.Class }}.Settings { - return NewSettings(tt.Telemetry) -} - func NewSettings(tt *componenttest.Telemetry) {{ .Status.Class }}.Settings { set := {{ .Status.Class }}test.NewNopSettings() set.ID = component.NewID(component.MustNewType("{{ .Type }}")) @@ -44,20 +29,6 @@ return set } {{- end }} -// Deprecated: [v0.119.0] Use {{ .Package }}test.AssertEqual* -func (tt *Telemetry) AssertMetrics(t *testing.T, expected []metricdata.Metrics, opts ...metricdatatest.Option) { - var md metricdata.ResourceMetrics - require.NoError(t, tt.Reader.Collect(context.Background(), &md)) - // ensure all required metrics are present - for _, want := range expected { - got := getMetricFromResource(want.Name, md) - metricdatatest.AssertEqual(t, want, got, opts...) - } - - // ensure no additional metrics are emitted - require.Equal(t, len(expected), lenMetrics(md)) -} - {{ range $name, $metric := .Telemetry.Metrics }} func AssertEqual{{ $name.Render }}(t *testing.T, tt *componenttest.Telemetry, dps []metricdata.{{- if eq $metric.Data.Type "Histogram" }} {{$metric.Data.Type}} {{- end }}DataPoint[{{ $metric.Data.BasicType }}], opts ...metricdatatest.Option) { diff --git a/cmd/mdatagen/internal/templates/telemetrytest_test.go.tmpl b/cmd/mdatagen/internal/templates/telemetrytest_test.go.tmpl index 8463ddb4809..be5826025b8 100644 --- a/cmd/mdatagen/internal/templates/telemetrytest_test.go.tmpl +++ b/cmd/mdatagen/internal/templates/telemetrytest_test.go.tmpl @@ -9,10 +9,12 @@ import ( "github.com/stretchr/testify/require" "go.opentelemetry.io/otel/sdk/metric/metricdata" "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest" + + "go.opentelemetry.io/collector/component/componenttest" ) func TestSetupTelemetry(t *testing.T) { - testTel := SetupTelemetry() + testTel := componenttest.NewTelemetry() tb, err := {{ .Package }}.NewTelemetryBuilder(testTel.NewTelemetrySettings()) require.NoError(t, err) defer tb.Shutdown() @@ -36,40 +38,8 @@ func TestSetupTelemetry(t *testing.T) { {{- end }} {{- end }} - testTel.AssertMetrics(t, []metricdata.Metrics{ - {{- range $name, $metric := .Telemetry.Metrics }} - { - Name: "otelcol_{{ $name }}", - Description: "{{ $metric.Description }}{{ $metric.Stability }}", - Unit: "{{ $metric.Unit }}", - {{ if eq $metric.Data.Type "Gauge" -}} - Data: metricdata.Gauge[{{ $metric.Gauge.MetricValueType.BasicType }}]{ - DataPoints: []metricdata.DataPoint[{{ $metric.Gauge.MetricValueType.BasicType }}]{ - {}, - }, - }, - {{- else if eq $metric.Data.Type "Sum" -}} - Data: metricdata.Sum[{{ $metric.Sum.MetricValueType.BasicType }}]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: {{ $metric.Sum.Mono.Monotonic }}, - DataPoints: []metricdata.DataPoint[{{ $metric.Sum.MetricValueType.BasicType }}]{ - {}, - }, - }, - {{- else if eq $metric.Data.Type "Histogram" -}} - Data: metricdata.Histogram[{{ $metric.Histogram.MetricValueType.BasicType }}]{ - Temporality: metricdata.CumulativeTemporality, - DataPoints: []metricdata.HistogramDataPoint[{{ $metric.Histogram.MetricValueType.BasicType }}]{ - {}, - }, - }, - {{- end }} - }, - {{- end }} - }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreValue()) - {{- range $name, $metric := .Telemetry.Metrics }} - AssertEqual{{ $name.Render }}(t, testTel.Telemetry, + AssertEqual{{ $name.Render }}(t, testTel, {{ if eq $metric.Data.Type "Gauge" -}} []metricdata.DataPoint[{{ $metric.Gauge.MetricValueType.BasicType }}]{{"{{Value: 1}}"}}, {{- else if eq $metric.Data.Type "Sum" -}} diff --git a/cmd/otelcorecol/builder-config.yaml b/cmd/otelcorecol/builder-config.yaml index f98ba9eae43..12c77d08293 100644 --- a/cmd/otelcorecol/builder-config.yaml +++ b/cmd/otelcorecol/builder-config.yaml @@ -41,6 +41,7 @@ replaces: - go.opentelemetry.io/collector/client => ../../client - go.opentelemetry.io/collector/component => ../../component - go.opentelemetry.io/collector/component/componenttest => ../../component/componenttest + - go.opentelemetry.io/collector/component/componentattribute => ../../component/componentattribute - go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus - go.opentelemetry.io/collector/config/configauth => ../../config/configauth - go.opentelemetry.io/collector/config/configcompression => ../../config/configcompression @@ -52,6 +53,7 @@ replaces: - go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - go.opentelemetry.io/collector/config/configtls => ../../config/configtls - go.opentelemetry.io/collector/confmap => ../../confmap + - go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap - go.opentelemetry.io/collector/confmap/provider/envprovider => ../../confmap/provider/envprovider - go.opentelemetry.io/collector/confmap/provider/fileprovider => ../../confmap/provider/fileprovider - go.opentelemetry.io/collector/confmap/provider/httpprovider => ../../confmap/provider/httpprovider diff --git a/cmd/otelcorecol/go.mod b/cmd/otelcorecol/go.mod index c06fb37dd90..c2e4f66babb 100644 --- a/cmd/otelcorecol/go.mod +++ b/cmd/otelcorecol/go.mod @@ -4,7 +4,7 @@ module go.opentelemetry.io/collector/cmd/otelcorecol go 1.22.0 -toolchain go1.22.11 +toolchain go1.22.12 require ( go.opentelemetry.io/collector/component v0.119.0 @@ -31,7 +31,7 @@ require ( go.opentelemetry.io/collector/receiver v0.119.0 go.opentelemetry.io/collector/receiver/nopreceiver v0.119.0 go.opentelemetry.io/collector/receiver/otlpreceiver v0.119.0 - golang.org/x/sys v0.29.0 + golang.org/x/sys v0.30.0 ) require ( @@ -82,6 +82,7 @@ require ( go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector v0.119.0 // indirect go.opentelemetry.io/collector/client v1.25.0 // indirect + go.opentelemetry.io/collector/component/componentattribute v0.119.0 // indirect go.opentelemetry.io/collector/component/componentstatus v0.119.0 // indirect go.opentelemetry.io/collector/component/componenttest v0.119.0 // indirect go.opentelemetry.io/collector/config/configauth v0.119.0 // indirect @@ -93,6 +94,7 @@ require ( go.opentelemetry.io/collector/config/configretry v1.25.0 // indirect go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/config/configtls v1.25.0 // indirect + go.opentelemetry.io/collector/confmap/xconfmap v0.0.0-20250205001856-68ff067415c1 // indirect go.opentelemetry.io/collector/connector/connectortest v0.119.0 // indirect go.opentelemetry.io/collector/connector/xconnector v0.119.0 // indirect go.opentelemetry.io/collector/consumer v1.25.0 // indirect @@ -156,7 +158,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -168,6 +170,8 @@ replace go.opentelemetry.io/collector/component => ../../component replace go.opentelemetry.io/collector/component/componenttest => ../../component/componenttest +replace go.opentelemetry.io/collector/component/componentattribute => ../../component/componentattribute + replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus replace go.opentelemetry.io/collector/config/configauth => ../../config/configauth @@ -190,6 +194,8 @@ replace go.opentelemetry.io/collector/config/configtls => ../../config/configtls replace go.opentelemetry.io/collector/confmap => ../../confmap +replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap + replace go.opentelemetry.io/collector/confmap/provider/envprovider => ../../confmap/provider/envprovider replace go.opentelemetry.io/collector/confmap/provider/fileprovider => ../../confmap/provider/fileprovider diff --git a/cmd/otelcorecol/go.sum b/cmd/otelcorecol/go.sum index b168c0c7f9d..8b78e7a2064 100644 --- a/cmd/otelcorecol/go.sum +++ b/cmd/otelcorecol/go.sum @@ -192,8 +192,8 @@ 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.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.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.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= @@ -214,8 +214,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/component/componentattribute/Makefile b/component/componentattribute/Makefile new file mode 100644 index 00000000000..ded7a36092d --- /dev/null +++ b/component/componentattribute/Makefile @@ -0,0 +1 @@ +include ../../Makefile.Common diff --git a/component/componentattribute/attribute.go b/component/componentattribute/attribute.go new file mode 100644 index 00000000000..3fb20784b10 --- /dev/null +++ b/component/componentattribute/attribute.go @@ -0,0 +1,12 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package componentattribute // import "go.opentelemetry.io/collector/component/componentattribute" + +const ( + ComponentKindKey = "otelcol.component.kind" + ComponentIDKey = "otelcol.component.id" + PipelineIDKey = "otelcol.pipeline.id" + SignalKey = "otelcol.signal" + SignalOutputKey = "otelcol.signal.output" +) diff --git a/component/componentattribute/go.mod b/component/componentattribute/go.mod new file mode 100644 index 00000000000..1e0fdddd499 --- /dev/null +++ b/component/componentattribute/go.mod @@ -0,0 +1,22 @@ +module go.opentelemetry.io/collector/component/componentattribute + +go 1.22.0 + +require ( + github.com/stretchr/testify v1.10.0 + go.opentelemetry.io/collector/pipeline v0.119.0 + go.opentelemetry.io/otel v1.34.0 + go.uber.org/zap v1.27.0 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rogpeppe/go-internal v1.10.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) + +replace go.opentelemetry.io/collector/pipeline => ../../pipeline diff --git a/component/componentattribute/go.sum b/component/componentattribute/go.sum new file mode 100644 index 00000000000..b679fbf9bf5 --- /dev/null +++ b/component/componentattribute/go.sum @@ -0,0 +1,33 @@ +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +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.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +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/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +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.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/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= +go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= +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= +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/component/componentattribute/logger.go b/component/componentattribute/logger.go new file mode 100644 index 00000000000..63c604dd6d1 --- /dev/null +++ b/component/componentattribute/logger.go @@ -0,0 +1,46 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package componentattribute // import "go.opentelemetry.io/collector/component/componentattribute" + +import ( + "go.opentelemetry.io/otel/attribute" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +var _ zapcore.Core = (*coreWithout)(nil) + +type coreWithout struct { + zapcore.Core + from zapcore.Core + fields []zap.Field +} + +func NewLogger(logger *zap.Logger, attrs *attribute.Set) *zap.Logger { + fields := []zap.Field{} + for _, kv := range attrs.ToSlice() { + fields = append(fields, zap.String(string(kv.Key), kv.Value.AsString())) + } + return logger.WithOptions( + zap.WrapCore(func(core zapcore.Core) zapcore.Core { + return &coreWithout{Core: core.With(fields), from: core, fields: fields} + }), + ) +} + +func (l *coreWithout) Without(keys ...string) zapcore.Core { + excludeKeys := make(map[string]struct{}) + for _, key := range keys { + excludeKeys[key] = struct{}{} + } + + fieldsWithout := []zap.Field{} + for _, field := range l.fields { + if _, excluded := excludeKeys[field.Key]; !excluded { + fieldsWithout = append(fieldsWithout, field) + } + } + + return &coreWithout{Core: l.from.With(fieldsWithout), from: l.from, fields: fieldsWithout} +} diff --git a/component/componentattribute/logger_test.go b/component/componentattribute/logger_test.go new file mode 100644 index 00000000000..cb1f360c6f7 --- /dev/null +++ b/component/componentattribute/logger_test.go @@ -0,0 +1,69 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package componentattribute_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel/attribute" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "go.uber.org/zap/zaptest/observer" + + "go.opentelemetry.io/collector/component/componentattribute" + "go.opentelemetry.io/collector/pipeline" +) + +type loggerCore interface { + Without(fields ...string) zapcore.Core +} + +func TestCore(t *testing.T) { + core, observed := observer.New(zap.DebugLevel) + logger := zap.New(core).With(zap.String("preexisting", "value")) + + attrs := attribute.NewSet( + attribute.String(componentattribute.SignalKey, pipeline.SignalLogs.String()), + attribute.String(componentattribute.ComponentIDKey, "filelog"), + ) + + parent := componentattribute.NewLogger(logger, &attrs) + parent.Info("test parent before child") + childCore := parent.Core().(loggerCore).Without(string(componentattribute.SignalKey)) + child := zap.New(childCore) + child.Info("test child") + parent.Info("test parent after child") + + observedLogs := observed.All() + require.Len(t, observedLogs, 3) + + parentContext := map[string]string{ + "preexisting": "value", + componentattribute.SignalKey: pipeline.SignalLogs.String(), + componentattribute.ComponentIDKey: "filelog", + } + childContext := map[string]string{ + "preexisting": "value", + componentattribute.ComponentIDKey: "filelog", + } + + require.Equal(t, "test parent before child", observedLogs[0].Message) + require.Len(t, observedLogs[0].Context, len(parentContext)) + for _, field := range observedLogs[0].Context { + require.Equal(t, parentContext[field.Key], field.String) + } + + require.Equal(t, "test child", observedLogs[1].Message) + require.Len(t, observedLogs[1].Context, len(childContext)) + for _, field := range observedLogs[1].Context { + require.Equal(t, childContext[field.Key], field.String) + } + + require.Equal(t, "test parent after child", observedLogs[2].Message) + require.Len(t, observedLogs[2].Context, len(parentContext)) + for _, field := range observedLogs[2].Context { + require.Equal(t, parentContext[field.Key], field.String) + } +} diff --git a/component/componentstatus/go.mod b/component/componentstatus/go.mod index 23f7ef404fc..20cce823a3c 100644 --- a/component/componentstatus/go.mod +++ b/component/componentstatus/go.mod @@ -12,7 +12,6 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -24,12 +23,10 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/component => ../ replace go.opentelemetry.io/collector/pdata => ../../pdata diff --git a/component/componentstatus/go.sum b/component/componentstatus/go.sum index 68c5d74f916..535da3c7b2d 100644 --- a/component/componentstatus/go.sum +++ b/component/componentstatus/go.sum @@ -79,8 +79,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/component/componenttest/go.mod b/component/componenttest/go.mod index 064f075a546..a5e248aac90 100644 --- a/component/componenttest/go.mod +++ b/component/componenttest/go.mod @@ -5,7 +5,6 @@ go 1.22.0 require ( github.com/stretchr/testify v1.10.0 go.opentelemetry.io/collector/component v0.119.0 - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 go.opentelemetry.io/collector/pdata v1.25.0 go.opentelemetry.io/otel v1.34.0 go.opentelemetry.io/otel/metric v1.34.0 @@ -30,12 +29,10 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) replace go.opentelemetry.io/collector/component => ../ replace go.opentelemetry.io/collector/pdata => ../../pdata - -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry diff --git a/component/componenttest/go.sum b/component/componenttest/go.sum index 88913771563..97b9d860e8e 100644 --- a/component/componenttest/go.sum +++ b/component/componenttest/go.sum @@ -80,8 +80,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/component/componenttest/nop_telemetry.go b/component/componenttest/nop_telemetry.go index 0324f65c980..1f50783e729 100644 --- a/component/componenttest/nop_telemetry.go +++ b/component/componenttest/nop_telemetry.go @@ -9,7 +9,6 @@ import ( "go.uber.org/zap" "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config/configtelemetry" "go.opentelemetry.io/collector/pdata/pcommon" ) @@ -19,7 +18,6 @@ func NewNopTelemetrySettings() component.TelemetrySettings { Logger: zap.NewNop(), TracerProvider: nooptrace.NewTracerProvider(), MeterProvider: noopmetric.NewMeterProvider(), - MetricsLevel: configtelemetry.LevelNone, Resource: pcommon.NewResource(), } } diff --git a/component/componenttest/nop_telemetry_test.go b/component/componenttest/nop_telemetry_test.go index 8850ba5e70d..aa3982c2a75 100644 --- a/component/componenttest/nop_telemetry_test.go +++ b/component/componenttest/nop_telemetry_test.go @@ -7,8 +7,6 @@ import ( "testing" "github.com/stretchr/testify/assert" - - "go.opentelemetry.io/collector/config/configtelemetry" ) func TestNewNopTelemetrySettings(t *testing.T) { @@ -22,6 +20,5 @@ func TestNewNopTelemetrySettings(t *testing.T) { assert.NotPanics(t, func() { nts.MeterProvider.Meter("test") }) - assert.Equal(t, configtelemetry.LevelNone, nts.MetricsLevel) //nolint:staticcheck assert.Equal(t, 0, nts.Resource.Attributes().Len()) } diff --git a/component/componenttest/obsreporttest.go b/component/componenttest/obsreporttest.go index 07d69cad00d..4cd902a310d 100644 --- a/component/componenttest/obsreporttest.go +++ b/component/componenttest/obsreporttest.go @@ -4,7 +4,6 @@ package componenttest // import "go.opentelemetry.io/collector/component/componenttest" import ( - "go.opentelemetry.io/otel/attribute" sdkmetric "go.opentelemetry.io/otel/sdk/metric" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" @@ -30,56 +29,12 @@ type TestTelemetry struct { id component.ID } -// Deprecated: [v0.119.0] use the metadatatest.AssertEqualMetric series of functions instead. -// CheckExporterTraces checks that for the current exported values for trace exporter metrics match given values. -func (tts *TestTelemetry) CheckExporterTraces(sentSpans, sendFailedSpans int64) error { - return checkExporter(tts.Telemetry, tts.id, "spans", sentSpans, sendFailedSpans) -} - -// Deprecated: [v0.119.0] use the metadatatest.AssertEqualMetric series of functions instead. -// CheckExporterMetrics checks that for the current exported values for metrics exporter metrics match given values. -func (tts *TestTelemetry) CheckExporterMetrics(sentMetricsPoints, sendFailedMetricsPoints int64) error { - return checkExporter(tts.Telemetry, tts.id, "metric_points", sentMetricsPoints, sendFailedMetricsPoints) -} - -// Deprecated: [v0.119.0] use the metadatatest.AssertEqualMetric series of functions instead. -func (tts *TestTelemetry) CheckExporterEnqueueFailedMetrics(enqueueFailed int64) error { - return checkExporterEnqueueFailed(tts.Telemetry, tts.id, "metric_points", enqueueFailed) -} - -// Deprecated: [v0.119.0] use the metadatatest.AssertEqualMetric series of functions instead. -func (tts *TestTelemetry) CheckExporterEnqueueFailedTraces(enqueueFailed int64) error { - return checkExporterEnqueueFailed(tts.Telemetry, tts.id, "spans", enqueueFailed) -} - -// Deprecated: [v0.119.0] use the metadatatest.AssertEqualMetric series of functions instead. -func (tts *TestTelemetry) CheckExporterEnqueueFailedLogs(enqueueFailed int64) error { - return checkExporterEnqueueFailed(tts.Telemetry, tts.id, "log_records", enqueueFailed) -} - -// Deprecated: [v0.119.0] use the metadatatest.AssertEqualMetric series of functions instead. -// CheckExporterLogs checks that for the current exported values for logs exporter metrics match given values. -func (tts *TestTelemetry) CheckExporterLogs(sentLogRecords, sendFailedLogRecords int64) error { - return checkExporter(tts.Telemetry, tts.id, "log_records", sentLogRecords, sendFailedLogRecords) -} - -// Deprecated: [v0.119.0] use the metadatatest.AssertEqualMetric series of functions instead. -func (tts *TestTelemetry) CheckExporterMetricGauge(metric string, val int64, extraAttrs ...attribute.KeyValue) error { - attrs := attributesForExporterMetrics(tts.id, extraAttrs...) - return checkIntGauge(tts.Telemetry, metric, val, attrs) -} - +// Deprecated: [v0.120.0] use the metadatatest.AssertEqualMetric series of functions instead. // CheckReceiverTraces checks that for the current exported values for trace receiver metrics match given values. func (tts *TestTelemetry) CheckReceiverTraces(protocol string, acceptedSpans, droppedSpans int64) error { return checkReceiver(tts.Telemetry, tts.id, "spans", protocol, acceptedSpans, droppedSpans) } -// Deprecated: [v0.119.0] use the metadatatest.AssertEqualMetric series of functions instead. -// CheckReceiverLogs checks that for the current exported values for logs receiver metrics match given values. -func (tts *TestTelemetry) CheckReceiverLogs(protocol string, acceptedLogRecords, droppedLogRecords int64) error { - return checkReceiver(tts.Telemetry, tts.id, "log_records", protocol, acceptedLogRecords, droppedLogRecords) -} - // CheckReceiverMetrics checks that for the current exported values for metrics receiver metrics match given values. func (tts *TestTelemetry) CheckReceiverMetrics(protocol string, acceptedMetricPoints, droppedMetricPoints int64) error { return checkReceiver(tts.Telemetry, tts.id, "metric_points", protocol, acceptedMetricPoints, droppedMetricPoints) diff --git a/component/componenttest/otelchecker.go b/component/componenttest/otelchecker.go index eaa8aad724c..369057f3933 100644 --- a/component/componenttest/otelchecker.go +++ b/component/componenttest/otelchecker.go @@ -20,37 +20,6 @@ func checkReceiver(tel *Telemetry, receiver component.ID, datatype, protocol str checkIntSum(tel, "otelcol_receiver_refused_"+datatype, droppedMetricPoints, receiverAttrs)) } -func checkExporter(tel *Telemetry, exporter component.ID, datatype string, sent, sendFailed int64) error { - exporterAttrs := attributesForExporterMetrics(exporter) - errs := checkIntSum(tel, "otelcol_exporter_sent_"+datatype, sent, exporterAttrs) - if sendFailed > 0 { - errs = multierr.Append(errs, - checkIntSum(tel, "otelcol_exporter_send_failed_"+datatype, sendFailed, exporterAttrs)) - } - return errs -} - -func checkExporterEnqueueFailed(tel *Telemetry, exporter component.ID, datatype string, enqueueFailed int64) error { - if enqueueFailed == 0 { - return nil - } - exporterAttrs := attributesForExporterMetrics(exporter) - return checkIntSum(tel, "otelcol_exporter_enqueue_failed_"+datatype, enqueueFailed, exporterAttrs) -} - -func checkIntGauge(tel *Telemetry, metric string, expected int64, expectedAttrs attribute.Set) error { - dp, err := getGaugeDataPoint[int64](tel, metric, expectedAttrs) - if err != nil { - return err - } - - if dp.Value != expected { - return fmt.Errorf("values for metric '%s' did not match, expected '%d' got '%d'", metric, expected, dp.Value) - } - - return nil -} - func checkIntSum(tel *Telemetry, expectedMetric string, expected int64, expectedAttrs attribute.Set) error { dp, err := getSumDataPoint[int64](tel, expectedMetric, expectedAttrs) if err != nil { @@ -78,20 +47,6 @@ func getSumDataPoint[N int64 | float64](tel *Telemetry, expectedName string, exp } } -func getGaugeDataPoint[N int64 | float64](tel *Telemetry, expectedName string, expectedAttrs attribute.Set) (metricdata.DataPoint[N], error) { - m, err := tel.GetMetric(expectedName) - if err != nil { - return metricdata.DataPoint[N]{}, err - } - - switch a := m.Data.(type) { - case metricdata.Gauge[N]: - return getDataPoint(a.DataPoints, expectedName, expectedAttrs) - default: - return metricdata.DataPoint[N]{}, fmt.Errorf("unknown metric type: %T", a) - } -} - func getDataPoint[N int64 | float64](dps []metricdata.DataPoint[N], expectedName string, expectedAttrs attribute.Set) (metricdata.DataPoint[N], error) { for _, dp := range dps { if expectedAttrs.Equals(&dp.Attributes) { @@ -108,10 +63,3 @@ func attributesForReceiverMetrics(receiver component.ID, transport string) attri attribute.String(transportTag, transport), ) } - -// attributesForExporterMetrics returns the attributes that are needed for the receiver metrics. -func attributesForExporterMetrics(exporter component.ID, extraAttrs ...attribute.KeyValue) attribute.Set { - attrs := []attribute.KeyValue{attribute.String(exporterTag, exporter.String())} - attrs = append(attrs, extraAttrs...) - return attribute.NewSet(attrs...) -} diff --git a/component/componenttest/telemetry.go b/component/componenttest/telemetry.go index 7f14b1d435f..e3d1a7f49bc 100644 --- a/component/componenttest/telemetry.go +++ b/component/componenttest/telemetry.go @@ -14,7 +14,6 @@ import ( "go.opentelemetry.io/otel/sdk/trace/tracetest" "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config/configtelemetry" ) type TelemetryOption interface { @@ -70,7 +69,6 @@ func NewTelemetry(opts ...TelemetryOption) *Telemetry { func (tt *Telemetry) NewTelemetrySettings() component.TelemetrySettings { set := NewNopTelemetrySettings() set.MeterProvider = tt.meterProvider - set.MetricsLevel = configtelemetry.LevelDetailed //nolint:staticcheck //SA1019 set.TracerProvider = tt.traceProvider return set } diff --git a/component/componenttest/telemetry_test.go b/component/componenttest/telemetry_test.go index 2bae32d84d3..91f06b21963 100644 --- a/component/componenttest/telemetry_test.go +++ b/component/componenttest/telemetry_test.go @@ -11,8 +11,6 @@ import ( "github.com/stretchr/testify/require" sdkmetric "go.opentelemetry.io/otel/sdk/metric" sdktrace "go.opentelemetry.io/otel/sdk/trace" - - "go.opentelemetry.io/collector/config/configtelemetry" ) func TestNewTelemetry(t *testing.T) { @@ -20,7 +18,6 @@ func TestNewTelemetry(t *testing.T) { assert.NotNil(t, tel.Reader) assert.NotNil(t, tel.SpanRecorder) set := tel.NewTelemetrySettings() - assert.Equal(t, configtelemetry.LevelDetailed, set.MetricsLevel) //nolint:staticcheck //SA1019 assert.IsType(t, &sdktrace.TracerProvider{}, set.TracerProvider) assert.IsType(t, &sdkmetric.MeterProvider{}, set.MeterProvider) require.NoError(t, tel.Shutdown(context.Background())) diff --git a/component/config.go b/component/config.go index a5862798fdd..6e5a785c349 100644 --- a/component/config.go +++ b/component/config.go @@ -14,7 +14,7 @@ import ( // Config defines the configuration for a component.Component. // // Implementations and/or any sub-configs (other types embedded or included in the Config implementation) -// MUST implement the ConfigValidator if any validation is required for that part of the configuration +// MUST implement xconfmap.Validator if any validation is required for that part of the configuration // (e.g. check if a required field is present). // // A valid implementation MUST pass the check componenttest.CheckConfigStruct (return nil error). @@ -25,6 +25,8 @@ type Config any var configValidatorType = reflect.TypeOf((*ConfigValidator)(nil)).Elem() // ConfigValidator defines an optional interface for configurations to implement to do validation. +// +// Deprecated: [v0.120.0] use xconfmap.Validator. type ConfigValidator interface { // Validate the configuration and returns an error if invalid. Validate() error @@ -32,6 +34,8 @@ type ConfigValidator interface { // ValidateConfig validates a config, by doing this: // - Call Validate on the config itself if the config implements ConfigValidator. +// +// Deprecated: [v0.120.0] use xconfmap.Validate. func ValidateConfig(cfg Config) error { var err error diff --git a/component/go.mod b/component/go.mod index 5e8698f4ce0..cededc399b4 100644 --- a/component/go.mod +++ b/component/go.mod @@ -4,7 +4,6 @@ go 1.22.0 require ( github.com/stretchr/testify v1.10.0 - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 go.opentelemetry.io/collector/pdata v1.25.0 go.opentelemetry.io/otel/metric v1.34.0 go.opentelemetry.io/otel/trace v1.34.0 @@ -23,12 +22,10 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) -replace go.opentelemetry.io/collector/config/configtelemetry => ../config/configtelemetry - replace go.opentelemetry.io/collector/pdata => ../pdata retract ( diff --git a/component/go.sum b/component/go.sum index 68c5d74f916..535da3c7b2d 100644 --- a/component/go.sum +++ b/component/go.sum @@ -79,8 +79,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/component/telemetry.go b/component/telemetry.go index 13331e95e11..dd5b110dd2e 100644 --- a/component/telemetry.go +++ b/component/telemetry.go @@ -7,8 +7,8 @@ import ( "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/trace" "go.uber.org/zap" + "go.uber.org/zap/zapcore" - "go.opentelemetry.io/collector/config/configtelemetry" "go.opentelemetry.io/collector/pdata/pcommon" ) @@ -24,14 +24,20 @@ type TelemetrySettings struct { // MeterProvider that the factory can pass to other instrumented third-party libraries. MeterProvider metric.MeterProvider - // MetricsLevel represents the configuration value set when the collector - // is configured. Components may use this level to decide whether it is - // appropriate to avoid computationally expensive calculations. - // - // Deprecated: [v0.119.0] Use https://pkg.go.dev/go.opentelemetry.io/otel/sdk/metric@v1.34.0/internal/x#readme-instrument-enabled instead. - // Components will temporarily need to add a view to `service/telemetry` to drop metrics based on the level. - MetricsLevel configtelemetry.Level - // Resource contains the resource attributes for the collector's telemetry. Resource pcommon.Resource } + +func (ts *TelemetrySettings) LoggerWithout(fields ...string) *zap.Logger { + type coreWithout interface { + Without(fields ...string) zapcore.Core + } + if _, ok := ts.Logger.Core().(coreWithout); !ok { + return ts.Logger + } + return ts.Logger.WithOptions( + zap.WrapCore(func(from zapcore.Core) zapcore.Core { + return from.(coreWithout).Without(fields...) + }), + ) +} diff --git a/config/configauth/README.md b/config/configauth/README.md index 4848881f2a7..25ed0be9c87 100644 --- a/config/configauth/README.md +++ b/config/configauth/README.md @@ -5,21 +5,24 @@ This module defines necessary interfaces to implement server and client type aut - Server type authenticators perform authentication for incoming HTTP/gRPC requests and are typically used in receivers. - Client type authenticators perform client-side authentication for outgoing HTTP/gRPC requests and are typically used in exporters. -The currently known authenticators are: +The currently known authenticators are listed below. -- Server Authenticators - - [Basic Auth Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/basicauthextension) - - [Bearer Token Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/bearertokenauthextension) - - [OIDC Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/oidcauthextension) +## Server Authenticators -- Client Authenticators - - [ASAP Client Authentication Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/asapauthextension) - - [Basic Auth Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/basicauthextension) - - [Bearer Token Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/bearertokenauthextension) - - [OAuth2 Client Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/oauth2clientauthextension) - - [Sigv4 Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/sigv4authextension) +- [Basic Auth Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/basicauthextension) +- [Bearer Token Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/bearertokenauthextension) +- [OIDC Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/oidcauthextension) + +## Client Authenticators + +- [ASAP Client Authentication Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/asapauthextension) +- [Basic Auth Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/basicauthextension) +- [Bearer Token Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/bearertokenauthextension) +- [OAuth2 Client Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/oauth2clientauthextension) +- [Sigv4 Extension](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/sigv4authextension) + +Example: -Examples: ```yaml extensions: oidc: diff --git a/config/configauth/configauth.go b/config/configauth/configauth.go index a3501cd0bed..96c3e9c092b 100644 --- a/config/configauth/configauth.go +++ b/config/configauth/configauth.go @@ -27,11 +27,6 @@ type Authentication struct { AuthenticatorID component.ID `mapstructure:"authenticator"` } -// NewDefaultAuthentication returns a default authentication configuration. -func NewDefaultAuthentication() *Authentication { - return &Authentication{} -} - // GetServerAuthenticator attempts to select the appropriate auth.Server from the list of extensions, // based on the requested extension name. If an authenticator is not found, an error is returned. func (a Authentication) GetServerAuthenticator(_ context.Context, extensions map[component.ID]component.Component) (auth.Server, error) { diff --git a/config/configauth/configauth_test.go b/config/configauth/configauth_test.go index 89551d952ab..77cc1c8bb5d 100644 --- a/config/configauth/configauth_test.go +++ b/config/configauth/configauth_test.go @@ -17,12 +17,6 @@ import ( var mockID = component.MustNewID("mock") -func TestNewDefaultAuthentication(t *testing.T) { - auth := NewDefaultAuthentication() - assert.NotNil(t, auth) - assert.Empty(t, auth) -} - func TestGetServer(t *testing.T) { testCases := []struct { name string diff --git a/config/configauth/go.mod b/config/configauth/go.mod index 8f184861501..330a93d9b66 100644 --- a/config/configauth/go.mod +++ b/config/configauth/go.mod @@ -14,7 +14,6 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -26,7 +25,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -36,8 +35,6 @@ replace go.opentelemetry.io/collector/component => ../../component replace go.opentelemetry.io/collector/component/componenttest => ../../component/componenttest -replace go.opentelemetry.io/collector/config/configtelemetry => ../configtelemetry - replace go.opentelemetry.io/collector/extension => ../../extension replace go.opentelemetry.io/collector/extension/auth => ../../extension/auth diff --git a/config/configauth/go.sum b/config/configauth/go.sum index ac84fbc4cf9..55710e1d6d5 100644 --- a/config/configauth/go.sum +++ b/config/configauth/go.sum @@ -79,8 +79,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/config/configgrpc/configgrpc.go b/config/configgrpc/configgrpc.go index 9f71e01ab7a..fc558227b4f 100644 --- a/config/configgrpc/configgrpc.go +++ b/config/configgrpc/configgrpc.go @@ -110,7 +110,6 @@ func NewDefaultClientConfig() *ClientConfig { return &ClientConfig{ TLSSetting: configtls.NewDefaultClientConfig(), Keepalive: NewDefaultKeepaliveClientConfig(), - Auth: configauth.NewDefaultAuthentication(), BalancerName: BalancerName(), } } @@ -196,7 +195,6 @@ type ServerConfig struct { func NewDefaultServerConfig() *ServerConfig { return &ServerConfig{ Keepalive: NewDefaultKeepaliveServerConfig(), - Auth: configauth.NewDefaultAuthentication(), } } diff --git a/config/configgrpc/configgrpc_test.go b/config/configgrpc/configgrpc_test.go index e979b7a1f49..7ce243df27a 100644 --- a/config/configgrpc/configgrpc_test.go +++ b/config/configgrpc/configgrpc_test.go @@ -47,7 +47,6 @@ func TestNewDefaultClientConfig(t *testing.T) { expected := &ClientConfig{ TLSSetting: configtls.NewDefaultClientConfig(), Keepalive: NewDefaultKeepaliveClientConfig(), - Auth: configauth.NewDefaultAuthentication(), BalancerName: BalancerName(), } @@ -83,7 +82,6 @@ func TestNewDefaultKeepaliveServerConfig(t *testing.T) { func TestNewDefaultServerConfig(t *testing.T) { expected := &ServerConfig{ Keepalive: NewDefaultKeepaliveServerConfig(), - Auth: configauth.NewDefaultAuthentication(), } result := NewDefaultServerConfig() diff --git a/config/configgrpc/go.mod b/config/configgrpc/go.mod index e2672e1fc82..414abce1e5e 100644 --- a/config/configgrpc/go.mod +++ b/config/configgrpc/go.mod @@ -37,7 +37,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/extension v0.119.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.119.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -50,7 +49,7 @@ require ( golang.org/x/sys v0.29.0 // indirect golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -66,8 +65,6 @@ replace go.opentelemetry.io/collector/config/configopaque => ../configopaque replace go.opentelemetry.io/collector/config/configtls => ../configtls -replace go.opentelemetry.io/collector/config/configtelemetry => ../configtelemetry - replace go.opentelemetry.io/collector/extension => ../../extension replace go.opentelemetry.io/collector/extension/auth => ../../extension/auth diff --git a/config/configgrpc/go.sum b/config/configgrpc/go.sum index 57e7f9de148..b46553d521d 100644 --- a/config/configgrpc/go.sum +++ b/config/configgrpc/go.sum @@ -101,8 +101,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/config/confighttp/go.mod b/config/confighttp/go.mod index 957a3ec0bca..43edcd25f33 100644 --- a/config/confighttp/go.mod +++ b/config/confighttp/go.mod @@ -34,7 +34,6 @@ require ( github.com/google/uuid v1.6.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/extension v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -46,7 +45,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -58,8 +57,6 @@ replace go.opentelemetry.io/collector/config/configopaque => ../configopaque replace go.opentelemetry.io/collector/config/configtls => ../configtls -replace go.opentelemetry.io/collector/config/configtelemetry => ../configtelemetry - replace go.opentelemetry.io/collector/extension => ../../extension replace go.opentelemetry.io/collector/extension/auth => ../../extension/auth diff --git a/config/confighttp/go.sum b/config/confighttp/go.sum index f908628c60d..0b04dec4374 100644 --- a/config/confighttp/go.sum +++ b/config/confighttp/go.sum @@ -100,8 +100,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/config/confighttp/xconfighttp/go.mod b/config/confighttp/xconfighttp/go.mod index 7dae7d22e87..94964477ad5 100644 --- a/config/confighttp/xconfighttp/go.mod +++ b/config/confighttp/xconfighttp/go.mod @@ -30,7 +30,6 @@ require ( go.opentelemetry.io/collector/config/configauth v0.119.0 // indirect go.opentelemetry.io/collector/config/configcompression v1.25.0 // indirect go.opentelemetry.io/collector/config/configopaque v1.25.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/config/configtls v1.25.0 // indirect go.opentelemetry.io/collector/extension v0.119.0 // indirect go.opentelemetry.io/collector/extension/auth v0.119.0 // indirect @@ -45,14 +44,12 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) replace go.opentelemetry.io/collector/config/confighttp => ../../confighttp -replace go.opentelemetry.io/collector/config/configtelemetry => ../../configtelemetry - replace go.opentelemetry.io/collector/client => ../../../client replace go.opentelemetry.io/collector/consumer => ../../../consumer diff --git a/config/confighttp/xconfighttp/go.sum b/config/confighttp/xconfighttp/go.sum index f908628c60d..0b04dec4374 100644 --- a/config/confighttp/xconfighttp/go.sum +++ b/config/confighttp/xconfighttp/go.sum @@ -100,8 +100,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/config/confignet/confignet.go b/config/confignet/confignet.go index 0f34aebb69f..511ecff5b2e 100644 --- a/config/confignet/confignet.go +++ b/config/confignet/confignet.go @@ -59,7 +59,7 @@ func (tt *TransportType) UnmarshalText(in []byte) error { type DialerConfig struct { // Timeout is the maximum amount of time a dial will wait for // a connect to complete. The default is no timeout. - Timeout time.Duration `mapstructure:"timeout"` + Timeout time.Duration `mapstructure:"timeout,omitempty"` } // NewDefaultDialerConfig creates a new DialerConfig with any default values set @@ -74,14 +74,14 @@ type AddrConfig struct { // or a host name that can be resolved to IP addresses. The port must be a literal port number or a service name. // If the host is a literal IPv6 address it must be enclosed in square brackets, as in "[2001:db8::1]:80" or // "[fe80::1%zone]:80". The zone specifies the scope of the literal IPv6 address as defined in RFC 4007. - Endpoint string `mapstructure:"endpoint"` + Endpoint string `mapstructure:"endpoint,omitempty"` // Transport to use. Allowed protocols are "tcp", "tcp4" (IPv4-only), "tcp6" (IPv6-only), "udp", "udp4" (IPv4-only), // "udp6" (IPv6-only), "ip", "ip4" (IPv4-only), "ip6" (IPv6-only), "unix", "unixgram" and "unixpacket". - Transport TransportType `mapstructure:"transport"` + Transport TransportType `mapstructure:"transport,omitempty"` // DialerConfig contains options for connecting to an address. - DialerConfig DialerConfig `mapstructure:"dialer"` + DialerConfig DialerConfig `mapstructure:"dialer,omitempty"` } // NewDefaultAddrConfig creates a new AddrConfig with any default values set @@ -130,10 +130,10 @@ type TCPAddrConfig struct { // resolved to IP addresses. The port must be a literal port number or a service name. // If the host is a literal IPv6 address it must be enclosed in square brackets, as in "[2001:db8::1]:80" or // "[fe80::1%zone]:80". The zone specifies the scope of the literal IPv6 address as defined in RFC 4007. - Endpoint string `mapstructure:"endpoint"` + Endpoint string `mapstructure:"endpoint,omitempty"` // DialerConfig contains options for connecting to an address. - DialerConfig DialerConfig `mapstructure:"dialer"` + DialerConfig DialerConfig `mapstructure:"dialer,omitempty"` } // NewDefaultTCPAddrConfig creates a new TCPAddrConfig with any default values set diff --git a/confmap/confmap.go b/confmap/confmap.go index aab1730687b..b60634ade65 100644 --- a/confmap/confmap.go +++ b/confmap/confmap.go @@ -24,6 +24,12 @@ const ( KeyDelimiter = "::" ) +const ( + // MapstructureTag is the struct field tag used to record marshaling/unmarshaling settings. + // See https://pkg.go.dev/github.com/go-viper/mapstructure/v2 for supported values. + MapstructureTag = "mapstructure" +) + // New creates a new empty confmap.Conf instance. func New() *Conf { return &Conf{k: koanf.New(KeyDelimiter)} @@ -205,7 +211,7 @@ func decodeConfig(m *Conf, result any, errorUnused bool, skipTopLevelUnmarshaler dc := &mapstructure.DecoderConfig{ ErrorUnused: errorUnused, Result: result, - TagName: "mapstructure", + TagName: MapstructureTag, WeaklyTypedInput: false, MatchName: caseSensitiveMatchName, DecodeHook: mapstructure.ComposeDecodeHookFunc( @@ -407,7 +413,7 @@ func unmarshalerEmbeddedStructsHookFunc() mapstructure.DecodeHookFuncValue { for i := 0; i < to.Type().NumField(); i++ { // embedded structs passed in via `squash` cannot be pointers. We just check if they are structs: f := to.Type().Field(i) - if f.IsExported() && slices.Contains(strings.Split(f.Tag.Get("mapstructure"), ","), "squash") { + if f.IsExported() && slices.Contains(strings.Split(f.Tag.Get(MapstructureTag), ","), "squash") { if unmarshaler, ok := to.Field(i).Addr().Interface().(Unmarshaler); ok { c := NewFromStringMap(fromAsMap) c.skipTopLevelUnmarshaler = true diff --git a/confmap/metadata.yaml b/confmap/metadata.yaml new file mode 100644 index 00000000000..9dbaf048e66 --- /dev/null +++ b/confmap/metadata.yaml @@ -0,0 +1,8 @@ +type: nop + +status: + codeowners: + active: + - mx-psi + - evan-bradley + class: confmap diff --git a/confmap/xconfmap/Makefile b/confmap/xconfmap/Makefile new file mode 100644 index 00000000000..ded7a36092d --- /dev/null +++ b/confmap/xconfmap/Makefile @@ -0,0 +1 @@ +include ../../Makefile.Common diff --git a/confmap/xconfmap/config.go b/confmap/xconfmap/config.go new file mode 100644 index 00000000000..b9e8edbbaa5 --- /dev/null +++ b/confmap/xconfmap/config.go @@ -0,0 +1,199 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package xconfmap // import "go.opentelemetry.io/collector/confmap/xconfmap" + +import ( + "errors" + "fmt" + "reflect" + "strconv" + "strings" + + "go.opentelemetry.io/collector/confmap" +) + +// As interface types are only used for static typing, a common idiom to find the reflection Type +// for an interface type Foo is to use a *Foo value. +var configValidatorType = reflect.TypeOf((*Validator)(nil)).Elem() + +// Validator defines an optional interface for configurations to implement to do validation. +type Validator interface { + // Validate the configuration and returns an error if invalid. + Validate() error +} + +// Validate validates a config, by doing this: +// - Call Validate on the config itself if the config implements ConfigValidator. +func Validate(cfg any) error { + var err error + + for _, validationErr := range validate(reflect.ValueOf(cfg)) { + err = errors.Join(err, validationErr) + } + + return err +} + +type pathError struct { + err error + path []string +} + +func (pe pathError) Error() string { + if len(pe.path) > 0 { + var path string + sb := strings.Builder{} + + _, _ = sb.WriteString(pe.path[len(pe.path)-1]) + for i := len(pe.path) - 2; i >= 0; i-- { + _, _ = sb.WriteString(confmap.KeyDelimiter) + _, _ = sb.WriteString(pe.path[i]) + } + path = sb.String() + + return fmt.Sprintf("%s: %s", path, pe.err) + } + + return pe.err.Error() +} + +func (pe pathError) Unwrap() error { + return pe.err +} + +func validate(v reflect.Value) []pathError { + errs := []pathError{} + // Validate the value itself. + switch v.Kind() { + case reflect.Invalid: + return nil + case reflect.Ptr, reflect.Interface: + return validate(v.Elem()) + case reflect.Struct: + err := callValidateIfPossible(v) + if err != nil { + errs = append(errs, pathError{err: err}) + } + + // Reflect on the pointed data and check each of its fields. + for i := 0; i < v.NumField(); i++ { + if !v.Type().Field(i).IsExported() { + continue + } + field := v.Type().Field(i) + path := fieldName(field) + + subpathErrs := validate(v.Field(i)) + for _, err := range subpathErrs { + errs = append(errs, pathError{ + err: err.err, + path: append(err.path, path), + }) + } + } + return errs + case reflect.Slice, reflect.Array: + err := callValidateIfPossible(v) + if err != nil { + errs = append(errs, pathError{err: err}) + } + + // Reflect on the pointed data and check each of its fields. + for i := 0; i < v.Len(); i++ { + subPathErrs := validate(v.Index(i)) + + for _, err := range subPathErrs { + errs = append(errs, pathError{ + err: err.err, + path: append(err.path, strconv.Itoa(i)), + }) + } + } + return errs + case reflect.Map: + err := callValidateIfPossible(v) + if err != nil { + errs = append(errs, pathError{err: err}) + } + + iter := v.MapRange() + for iter.Next() { + keyErrs := validate(iter.Key()) + valueErrs := validate(iter.Value()) + key := stringifyMapKey(iter.Key()) + + for _, err := range keyErrs { + errs = append(errs, pathError{err: err.err, path: append(err.path, key)}) + } + + for _, err := range valueErrs { + errs = append(errs, pathError{err: err.err, path: append(err.path, key)}) + } + } + return errs + default: + err := callValidateIfPossible(v) + if err != nil { + return []pathError{{err: err}} + } + + return nil + } +} + +func callValidateIfPossible(v reflect.Value) error { + // If the value type implements ConfigValidator just call Validate + if v.Type().Implements(configValidatorType) { + return v.Interface().(Validator).Validate() + } + + // If the pointer type implements ConfigValidator call Validate on the pointer to the current value. + if reflect.PointerTo(v.Type()).Implements(configValidatorType) { + // If not addressable, then create a new *V pointer and set the value to current v. + if !v.CanAddr() { + pv := reflect.New(reflect.PointerTo(v.Type()).Elem()) + pv.Elem().Set(v) + v = pv.Elem() + } + return v.Addr().Interface().(Validator).Validate() + } + + return nil +} + +func fieldName(field reflect.StructField) string { + var fieldName string + if tag, ok := field.Tag.Lookup(confmap.MapstructureTag); ok { + tags := strings.Split(tag, ",") + if len(tags) > 0 { + fieldName = tags[0] + } + } + // Even if the mapstructure tag exists, the field name may not + // be available, so set it if it is still blank. + if len(fieldName) == 0 { + fieldName = strings.ToLower(field.Name) + } + + return fieldName +} + +func stringifyMapKey(val reflect.Value) string { + var key string + + if str, ok := val.Interface().(string); ok { + key = str + } else if stringer, ok := val.Interface().(fmt.Stringer); ok { + key = stringer.String() + } else { + switch val.Kind() { + case reflect.Ptr, reflect.Interface, reflect.Struct, reflect.Slice, reflect.Array, reflect.Map: + key = fmt.Sprintf("[%T key]", val.Interface()) + default: + key = fmt.Sprintf("%v", val.Interface()) + } + } + + return key +} diff --git a/confmap/xconfmap/config_test.go b/confmap/xconfmap/config_test.go new file mode 100644 index 00000000000..0b45779d0fa --- /dev/null +++ b/confmap/xconfmap/config_test.go @@ -0,0 +1,323 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package xconfmap + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/assert" +) + +type configChildStruct struct { + Child errValidateConfig + ChildPtr *errValidateConfig +} + +type configChildSlice struct { + Child []errValidateConfig + ChildPtr []*errValidateConfig +} + +type configChildMapValue struct { + Child map[string]errValidateConfig + ChildPtr map[string]*errValidateConfig +} + +type configChildMapKey struct { + Child map[errType]string + ChildPtr map[*errType]string +} + +type configChildTypeDef struct { + Child errType + ChildPtr *errType +} + +type config any + +type configChildInterface struct { + Child config +} + +type errValidateConfig struct { + err error +} + +func (e *errValidateConfig) Validate() error { + return e.err +} + +type errType string + +func (e errType) Validate() error { + if e == "" { + return nil + } + return errors.New(string(e)) +} + +func newErrType(etStr string) *errType { + et := errType(etStr) + return &et +} + +type errMapType map[string]string + +func (e errMapType) Validate() error { + return errors.New(e["err"]) +} + +type structKey struct { + k string + e error +} + +func (s structKey) String() string { + return s.k +} + +func (s structKey) Validate() error { + return s.e +} + +type configChildMapCustomKey struct { + Child map[structKey]errValidateConfig +} + +func newErrMapType() *errMapType { + et := errMapType(nil) + return &et +} + +type configMapstructure struct { + Valid *errValidateConfig `mapstructure:"validtag,omitempty"` + NoData *errValidateConfig `mapstructure:""` + NoName *errValidateConfig `mapstructure:",remain"` +} + +type configDeeplyNested struct { + MapKeyChild map[configChildStruct]string + MapValueChild map[string]configChildStruct + SliceChild []configChildSlice + MapIntKey map[int]errValidateConfig + MapFloatKey map[float64]errValidateConfig +} + +type sliceTypeAlias []configChildSlice + +func (sliceTypeAlias) Validate() error { + return errors.New("sliceTypeAlias error") +} + +func TestValidateConfig(t *testing.T) { + tests := []struct { + name string + cfg any + expected error + }{ + { + name: "struct", + cfg: errValidateConfig{err: errors.New("struct")}, + expected: errors.New("struct"), + }, + { + name: "pointer struct", + cfg: &errValidateConfig{err: errors.New("pointer struct")}, + expected: errors.New("pointer struct"), + }, + { + name: "type", + cfg: errType("type"), + expected: errors.New("type"), + }, + { + name: "pointer child", + cfg: newErrType("pointer type"), + expected: errors.New("pointer type"), + }, + { + name: "child interface with nil", + cfg: configChildInterface{}, + expected: nil, + }, + { + name: "pointer to child interface with nil", + cfg: &configChildInterface{}, + expected: nil, + }, + { + name: "nil", + cfg: nil, + expected: nil, + }, + { + name: "nil map type", + cfg: errMapType(nil), + expected: errors.New(""), + }, + { + name: "nil pointer map type", + cfg: newErrMapType(), + expected: errors.New(""), + }, + { + name: "child struct", + cfg: configChildStruct{Child: errValidateConfig{err: errors.New("child struct")}}, + expected: errors.New("child: child struct"), + }, + { + name: "pointer child struct", + cfg: &configChildStruct{Child: errValidateConfig{err: errors.New("pointer child struct")}}, + expected: errors.New("child: pointer child struct"), + }, + { + name: "child struct pointer", + cfg: &configChildStruct{ChildPtr: &errValidateConfig{err: errors.New("child struct pointer")}}, + expected: errors.New("childptr: child struct pointer"), + }, + { + name: "child interface", + cfg: configChildInterface{Child: errValidateConfig{err: errors.New("child interface")}}, + expected: errors.New("child: child interface"), + }, + { + name: "pointer to child interface", + cfg: &configChildInterface{Child: errValidateConfig{err: errors.New("pointer to child interface")}}, + expected: errors.New("child: pointer to child interface"), + }, + { + name: "child interface with pointer", + cfg: configChildInterface{Child: &errValidateConfig{err: errors.New("child interface with pointer")}}, + expected: errors.New("child: child interface with pointer"), + }, + { + name: "pointer to child interface with pointer", + cfg: &configChildInterface{Child: &errValidateConfig{err: errors.New("pointer to child interface with pointer")}}, + expected: errors.New("child: pointer to child interface with pointer"), + }, + { + name: "child slice", + cfg: configChildSlice{Child: []errValidateConfig{{}, {err: errors.New("child slice")}}}, + expected: errors.New("child::1: child slice"), + }, + { + name: "pointer child slice", + cfg: &configChildSlice{Child: []errValidateConfig{{}, {err: errors.New("pointer child slice")}}}, + expected: errors.New("child::1: pointer child slice"), + }, + { + name: "child slice pointer", + cfg: &configChildSlice{ChildPtr: []*errValidateConfig{{}, {err: errors.New("child slice pointer")}}}, + expected: errors.New("childptr::1: child slice pointer"), + }, + { + name: "child map value", + cfg: configChildMapValue{Child: map[string]errValidateConfig{"test": {err: errors.New("child map")}}}, + expected: errors.New("child::test: child map"), + }, + { + name: "pointer child map value", + cfg: &configChildMapValue{Child: map[string]errValidateConfig{"test": {err: errors.New("pointer child map")}}}, + expected: errors.New("child::test: pointer child map"), + }, + { + name: "child map value pointer", + cfg: &configChildMapValue{ChildPtr: map[string]*errValidateConfig{"test": {err: errors.New("child map pointer")}}}, + expected: errors.New("childptr::test: child map pointer"), + }, + { + name: "child map key", + cfg: configChildMapKey{Child: map[errType]string{"child_map_key": ""}}, + expected: errors.New("child::child_map_key: child_map_key"), + }, + { + name: "pointer child map key", + cfg: &configChildMapKey{Child: map[errType]string{"pointer_child_map_key": ""}}, + expected: errors.New("child::pointer_child_map_key: pointer_child_map_key"), + }, + { + name: "child map key pointer", + cfg: &configChildMapKey{ChildPtr: map[*errType]string{newErrType("child map key pointer"): ""}}, + expected: errors.New("childptr::[*xconfmap.errType key]: child map key pointer"), + }, + { + name: "map with stringified non-string key type", + cfg: &configChildMapCustomKey{Child: map[structKey]errValidateConfig{{k: "struct_key", e: errors.New("custom key error")}: {err: errors.New("value error")}}}, + expected: errors.New("child::struct_key: custom key error\nchild::struct_key: value error"), + }, + { + name: "child type", + cfg: configChildTypeDef{Child: "child type"}, + expected: errors.New("child: child type"), + }, + { + name: "pointer child type", + cfg: &configChildTypeDef{Child: "pointer child type"}, + expected: errors.New("child: pointer child type"), + }, + { + name: "child type pointer", + cfg: &configChildTypeDef{ChildPtr: newErrType("child type pointer")}, + expected: errors.New("childptr: child type pointer"), + }, + { + name: "valid mapstructure tag", + cfg: configMapstructure{Valid: &errValidateConfig{errors.New("test")}}, + expected: errors.New("validtag: test"), + }, + { + name: "zero-length mapstructure tag", + cfg: configMapstructure{NoData: &errValidateConfig{errors.New("test")}}, + expected: errors.New("nodata: test"), + }, + { + name: "no field name in mapstructure tag", + cfg: configMapstructure{NoName: &errValidateConfig{errors.New("test")}}, + expected: errors.New("noname: test"), + }, + { + name: "nested map key error", + cfg: configDeeplyNested{MapKeyChild: map[configChildStruct]string{{Child: errValidateConfig{err: errors.New("child key error")}}: "val"}}, + expected: errors.New("mapkeychild::[xconfmap.configChildStruct key]::child: child key error"), + }, + { + name: "nested map value error", + cfg: configDeeplyNested{MapValueChild: map[string]configChildStruct{"key": {Child: errValidateConfig{err: errors.New("child key error")}}}}, + expected: errors.New("mapvaluechild::key::child: child key error"), + }, + { + name: "nested slice value error", + cfg: configDeeplyNested{SliceChild: []configChildSlice{{Child: []errValidateConfig{{err: errors.New("child key error")}}}}}, + expected: errors.New("slicechild::0::child::0: child key error"), + }, + { + name: "nested map with int key", + cfg: configDeeplyNested{MapIntKey: map[int]errValidateConfig{1: {err: errors.New("int key error")}}}, + expected: errors.New("mapintkey::1: int key error"), + }, + { + name: "nested map with float key", + cfg: configDeeplyNested{MapFloatKey: map[float64]errValidateConfig{1.2: {err: errors.New("float key error")}}}, + expected: errors.New("mapfloatkey::1.2: float key error"), + }, + { + name: "slice type alias", + cfg: sliceTypeAlias{}, + expected: errors.New("sliceTypeAlias error"), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := Validate(tt.cfg) + + if tt.expected != nil { + assert.EqualError(t, err, tt.expected.Error()) + } else { + assert.NoError(t, err) + } + }) + } +} diff --git a/confmap/xconfmap/go.mod b/confmap/xconfmap/go.mod new file mode 100644 index 00000000000..4b6c8e836aa --- /dev/null +++ b/confmap/xconfmap/go.mod @@ -0,0 +1,24 @@ +module go.opentelemetry.io/collector/confmap/xconfmap + +go 1.22.0 + +require ( + github.com/stretchr/testify v1.10.0 + go.opentelemetry.io/collector/confmap v1.25.0 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/go-viper/mapstructure/v2 v2.2.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.1.2 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/pmezard/go-difflib v1.0.0 // 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 +) + +replace go.opentelemetry.io/collector/confmap => ../ diff --git a/confmap/xconfmap/go.sum b/confmap/xconfmap/go.sum new file mode 100644 index 00000000000..7739cd77111 --- /dev/null +++ b/confmap/xconfmap/go.sum @@ -0,0 +1,35 @@ +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-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= +github.com/go-viper/mapstructure/v2 v2.2.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.1.2 h1:I2rtLRqXRy1p01m/utEtpZSSA6dcJbgGVuE27kW2PzQ= +github.com/knadh/koanf/v2 v2.1.2/go.mod h1:Gphfaen0q1Fc1HTgJgSTC4oRX9R2R5ErYMZJy8fLJBo= +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/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/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +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= +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/connectortest/go.mod b/connector/connectortest/go.mod index 6a946f89821..d871a0a4d2d 100644 --- a/connector/connectortest/go.mod +++ b/connector/connectortest/go.mod @@ -27,7 +27,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/internal/fanoutconsumer v0.119.0 // indirect go.opentelemetry.io/collector/pipeline v0.119.0 // indirect go.opentelemetry.io/collector/pipeline/xpipeline v0.119.0 // indirect @@ -43,7 +42,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -65,8 +64,6 @@ replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/co replace go.opentelemetry.io/collector/connector/xconnector => ../xconnector -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata replace go.opentelemetry.io/collector/pipeline => ../../pipeline diff --git a/connector/connectortest/go.sum b/connector/connectortest/go.sum index d4734044891..c4987361a75 100644 --- a/connector/connectortest/go.sum +++ b/connector/connectortest/go.sum @@ -91,8 +91,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/connector/forwardconnector/go.mod b/connector/forwardconnector/go.mod index 10a60871427..656585acaef 100644 --- a/connector/forwardconnector/go.mod +++ b/connector/forwardconnector/go.mod @@ -33,7 +33,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/connector/xconnector v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect go.opentelemetry.io/collector/internal/fanoutconsumer v0.119.0 // indirect @@ -51,7 +50,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -76,8 +75,6 @@ retract ( v0.69.0 // Release failed, use v0.69.1 ) -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile replace go.opentelemetry.io/collector/consumer/xconsumer => ../../consumer/xconsumer diff --git a/connector/forwardconnector/go.sum b/connector/forwardconnector/go.sum index 8bd3034e9c0..df70cc6d1c3 100644 --- a/connector/forwardconnector/go.sum +++ b/connector/forwardconnector/go.sum @@ -103,8 +103,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/connector/go.mod b/connector/go.mod index c79314e2ab1..ea4a0e7caf8 100644 --- a/connector/go.mod +++ b/connector/go.mod @@ -23,7 +23,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.119.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect @@ -35,14 +34,12 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) replace go.opentelemetry.io/collector/component => ../component -replace go.opentelemetry.io/collector/config/configtelemetry => ../config/configtelemetry - replace go.opentelemetry.io/collector/consumer => ../consumer replace go.opentelemetry.io/collector/pdata => ../pdata diff --git a/connector/go.sum b/connector/go.sum index 41634156c88..fdbf068c609 100644 --- a/connector/go.sum +++ b/connector/go.sum @@ -90,8 +90,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/connector/xconnector/go.mod b/connector/xconnector/go.mod index ac351994611..d6794f8e1e4 100644 --- a/connector/xconnector/go.mod +++ b/connector/xconnector/go.mod @@ -23,7 +23,6 @@ require ( 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.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -35,7 +34,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -53,8 +52,6 @@ replace go.opentelemetry.io/collector/component => ../../component replace go.opentelemetry.io/collector/pdata => ../../pdata -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata replace go.opentelemetry.io/collector/pipeline => ../../pipeline diff --git a/connector/xconnector/go.sum b/connector/xconnector/go.sum index 41634156c88..fdbf068c609 100644 --- a/connector/xconnector/go.sum +++ b/connector/xconnector/go.sum @@ -90,8 +90,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/connector/xconnector/metadata.yaml b/connector/xconnector/metadata.yaml new file mode 100644 index 00000000000..6b4b96842ad --- /dev/null +++ b/connector/xconnector/metadata.yaml @@ -0,0 +1,10 @@ +type: xconnector + +status: + class: connector + codeowners: + active: + - mx-psi + - dmathieu + stability: + development: [profiles] diff --git a/consumer/consumererror/go.mod b/consumer/consumererror/go.mod index f8185e4d8ca..c2737b692d9 100644 --- a/consumer/consumererror/go.mod +++ b/consumer/consumererror/go.mod @@ -23,7 +23,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/consumer/consumererror/go.sum b/consumer/consumererror/go.sum index edc81fe738b..2b6210da93c 100644 --- a/consumer/consumererror/go.sum +++ b/consumer/consumererror/go.sum @@ -86,8 +86,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/consumer/consumererror/xconsumererror/go.mod b/consumer/consumererror/xconsumererror/go.mod index 268f87f8a7a..78acf506a71 100644 --- a/consumer/consumererror/xconsumererror/go.mod +++ b/consumer/consumererror/xconsumererror/go.mod @@ -23,7 +23,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/consumer/consumererror/xconsumererror/go.sum b/consumer/consumererror/xconsumererror/go.sum index edc81fe738b..2b6210da93c 100644 --- a/consumer/consumererror/xconsumererror/go.sum +++ b/consumer/consumererror/xconsumererror/go.sum @@ -86,8 +86,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/consumer/consumertest/go.mod b/consumer/consumertest/go.mod index 7e379efb9d9..bdbab493399 100644 --- a/consumer/consumertest/go.mod +++ b/consumer/consumertest/go.mod @@ -27,7 +27,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/consumer/consumertest/go.sum b/consumer/consumertest/go.sum index edc81fe738b..2b6210da93c 100644 --- a/consumer/consumertest/go.sum +++ b/consumer/consumertest/go.sum @@ -86,8 +86,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/consumer/go.mod b/consumer/go.mod index 77e8cc582c7..84b6dd87bbb 100644 --- a/consumer/go.mod +++ b/consumer/go.mod @@ -22,7 +22,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/consumer/go.sum b/consumer/go.sum index 64ba821605e..492ab17649f 100644 --- a/consumer/go.sum +++ b/consumer/go.sum @@ -87,8 +87,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/consumer/logs.go b/consumer/logs.go index 15166ef1196..701ce5f35c6 100644 --- a/consumer/logs.go +++ b/consumer/logs.go @@ -14,7 +14,8 @@ import ( // as needed, and sends it to the next processing node if any or to the destination. type Logs interface { internal.BaseConsumer - // ConsumeLogs receives plog.Logs for consumption. + // ConsumeLogs processes the logs. After the function returns, the logs are no longer accessible, + // and accessing them is considered undefined behavior. ConsumeLogs(ctx context.Context, ld plog.Logs) error } diff --git a/consumer/metrics.go b/consumer/metrics.go index 47897f9363a..6a636a6caef 100644 --- a/consumer/metrics.go +++ b/consumer/metrics.go @@ -14,7 +14,8 @@ import ( // as needed, and sends it to the next processing node if any or to the destination. type Metrics interface { internal.BaseConsumer - // ConsumeMetrics receives pmetric.Metrics for consumption. + // ConsumeMetrics processes the metrics. After the function returns, the metrics are no longer accessible, + // and accessing them is considered undefined behavior. ConsumeMetrics(ctx context.Context, md pmetric.Metrics) error } diff --git a/consumer/traces.go b/consumer/traces.go index 60df2d04536..1fed65656f5 100644 --- a/consumer/traces.go +++ b/consumer/traces.go @@ -14,7 +14,8 @@ import ( // as needed, and sends it to the next processing node if any or to the destination. type Traces interface { internal.BaseConsumer - // ConsumeTraces receives ptrace.Traces for consumption. + // ConsumeTraces processes the traces. After the function returns, the traces are no longer accessible, + // and accessing them is considered undefined behavior. ConsumeTraces(ctx context.Context, td ptrace.Traces) error } diff --git a/consumer/xconsumer/go.mod b/consumer/xconsumer/go.mod index 2991e457eb3..f6ea46a8c1b 100644 --- a/consumer/xconsumer/go.mod +++ b/consumer/xconsumer/go.mod @@ -22,7 +22,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/consumer/xconsumer/go.sum b/consumer/xconsumer/go.sum index edc81fe738b..2b6210da93c 100644 --- a/consumer/xconsumer/go.sum +++ b/consumer/xconsumer/go.sum @@ -86,8 +86,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/consumer/xconsumer/metadata.yaml b/consumer/xconsumer/metadata.yaml new file mode 100644 index 00000000000..8c35cb33409 --- /dev/null +++ b/consumer/xconsumer/metadata.yaml @@ -0,0 +1,10 @@ +type: xconsumer + +status: + class: consumer + codeowners: + active: + - mx-psi + - dmathieu + stability: + development: [profiles] diff --git a/consumer/xconsumer/profiles.go b/consumer/xconsumer/profiles.go index 88ba2eb5a38..7f0b36f55ce 100644 --- a/consumer/xconsumer/profiles.go +++ b/consumer/xconsumer/profiles.go @@ -18,7 +18,8 @@ var errNilFunc = errors.New("nil consumer func") // as needed, and sends it to the next processing node if any or to the destination. type Profiles interface { internal.BaseConsumer - // ConsumeProfiles receives pprofile.Profiles for consumption. + // ConsumeProfiles processes the profiles. After the function returns, the profiles are no longer accessible, + // and accessing them is considered undefined behavior. ConsumeProfiles(ctx context.Context, td pprofile.Profiles) error } diff --git a/distributions.yaml b/distributions.yaml new file mode 100644 index 00000000000..7f5f57f825f --- /dev/null +++ b/distributions.yaml @@ -0,0 +1,12 @@ +# 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 + - name: k8s + url: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-k8s + - name: otlp + url: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-otlp diff --git a/docs/coding-guidelines.md b/docs/coding-guidelines.md index ff2ea42e666..23a239ab692 100644 --- a/docs/coding-guidelines.md +++ b/docs/coding-guidelines.md @@ -7,7 +7,7 @@ for coding advice). The code must adhere to the following robustness principles are important for software that runs autonomously and continuously without direct interaction with a human (such as this Collector). -### Naming convention +## Naming convention To keep naming patterns consistent across the project, naming patterns are enforced to make intent clear by: @@ -38,7 +38,7 @@ To keep naming patterns consistent across the project, naming patterns are enfor - `func CreateTracesExport(...) {...}` - `func CreateTracesToTracesFunc(...) {...}` -#### Configuration structs +### Configuration structs When naming configuration structs, use the following guidelines: @@ -47,7 +47,7 @@ When naming configuration structs, use the following guidelines: - Use the `Settings` suffix for configuration structs that are set by developers in the code. For example, `component.TelemetrySettings` ends in `Settings` since it is set by developers in the code. - Avoid redundant prefixes that are already implied by the package name. For example, use`configgrpc.ClientConfig` instead of `configgrpc.GRPCClientConfig`. -### Module organization +## Module organization As usual in Go projects, organize your code into packages grouping related functionality. To ensure that we can evolve different parts of the API independently, you should also group related packages @@ -82,7 +82,7 @@ When adding a new module remember to update the following: 1. Open a follow up PR to update pseudo-versions in all go.mod files. See [this example PR](https://github.com/open-telemetry/opentelemetry-collector/pull/11668). -### Enumerations +## Enumerations To keep naming patterns consistent across the project, enumeration patterns are enforced to make intent clear: @@ -96,7 +96,7 @@ To keep naming patterns consistent across the project, enumeration patterns are - `pmetric.MetricTypeGauge` for `pmetric.MetricType` -### Recommended Libraries / Defaults +## Recommended Libraries / Defaults In order to simplify development within the project, we have made certain library recommendations that should be followed. @@ -108,13 +108,13 @@ In order to simplify development within the project, we have made certain librar Within the project, there are some packages that have yet to follow the recommendations and are being addressed. However, any new code should adhere to the recommendations. -### Default Configuration +## Default Configuration To guarantee backward-compatible behavior, all configuration packages should supply a `NewDefault[config name]` functions that create a default version of the config. The package does not need to guarantee that `NewDefault[config name]` returns a usable configuration—only that default values will be set. For example, if the configuration requires that a field, such as `Endpoint` be set, but there is no valid default value, then `NewDefault[config name]` may set that value to `""` with the expectation that the user will set a valid value. Users should always initialize the config struct with this function and overwrite anything as needed. -### Startup Error Handling +## Startup Error Handling Verify configuration during startup and fail fast if the configuration is invalid. This will bring the attention of a human to the problem as it is more typical for humans @@ -126,7 +126,7 @@ explain the problem and exit with a non-zero code. It is acceptable to crash the during startup if there is no good way to exit cleanly but do your best to log and exit cleanly with a process exit code. -### Propagate Errors to the Caller +## Propagate Errors to the Caller Do not crash or exit outside the `main()` function, e.g. via `log.Fatal` or `os.Exit`, even during startup. Instead, return detailed errors to be handled appropriately @@ -134,7 +134,7 @@ by the caller. The code in packages other than `main` may be imported and used b third-party applications, and they should have full control over error handling and process termination. -### Do not Crash after Startup +## Do not Crash after Startup Do not crash or exit the Collector process after the startup sequence is finished. A running Collector typically contains data that is received but not yet exported further @@ -143,7 +143,7 @@ process will result in losing this data since typically the receiver has already acknowledged the receipt for this data and the senders of the data will not send that data again. -### Bad Input Handling +## Bad Input Handling Do not crash on bad input in receivers or elsewhere in the pipeline. [Crash-only software](https://en.wikipedia.org/wiki/Crash-only_software) @@ -160,7 +160,7 @@ sender. If it is elsewhere in the pipeline it may be too late to send a response to the sender (particularly in processors which are not synchronously processing data). In either case, it is recommended to keep a metric that counts bad input data. -### Error Handling and Retries +## Error Handling and Retries Be rigorous in error handling. Don't ignore errors. Think carefully about each error and decide if it is a fatal problem or a transient problem that may go away @@ -173,7 +173,7 @@ your destination when the network is restored or the destination is recovered. [Exponential Backoff](https://github.com/cenkalti/backoff) is a good library that provides all this functionality. -### Logging +## Logging Log your component startup and shutdown, including successful outcomes (but don't overdo it, and keep the number of success messages to a minimum). @@ -190,7 +190,7 @@ the event happens. Make log messages human readable and also include data that is needed for easier understanding of what happened and in what context. -### Executing External Processes +## Executing External Processes The components should avoid executing arbitrary external processes with arbitrary command line arguments based on user input, including input received from the network or input @@ -208,7 +208,7 @@ The following limitations are recommended: if necessary, deriving the value from the user input. Limit as much as possible the size of the possible space of values for command line arguments. -### Observability +## Observability Out of the box, your users should be able to observe the state of your component. See [observability.md](observability.md) for more details. @@ -293,7 +293,7 @@ builder: tsp.telemetry.ProcessorTailsamplingSamplingdecisionLatency.Record(ctx, ...) ``` -### Resource Usage +## Resource Usage Limit usage of CPU, RAM, and other resources that the code can use. Do not write code that consumes resources in an uncontrolled manner. For example, if you have a queue @@ -310,7 +310,7 @@ runs out of memory. Instead have protections for these situations, e.g. when hit resource limits drop the data and record the fact that it was dropped in a metric that is exposed to users. -### Graceful Shutdown +## Graceful Shutdown Collector does not yet support graceful shutdown but we plan to add it. All components must be ready to shutdown gracefully via `Shutdown()` function that all component @@ -319,14 +319,14 @@ and export it out of the Collector before shutdown is completed. The shutdown pr will have a maximum allowed duration so put a limit on how long your shutdown operation can take. -### Unit Tests +## Unit Tests Cover important functionality with unit tests. We require that contributions do not decrease the overall code coverage of the codebase - this is aligned with our goal to increase coverage over time. Keep track of execution time for your unit tests and try to keep them as short as possible. -#### Testing Library Recommendations +### Testing Library Recommendations To keep testing practices consistent across the project, it is advised to use these libraries under these circumstances: @@ -336,12 +336,12 @@ these circumstances: - For mocking external resources, use `"github.com/stretchr/testify/mock"` - For validating HTTP traffic interactions, `"net/http/httptest"` -### Integration Testing +## Integration Testing Integration testing is encouraged throughout the project, container images can be used in order to facilitate a local version. In their absence, it is strongly advised to mock the integration. -### Using CGO +## Using CGO Using CGO is prohibited due to the lack of portability and complexity that comes with managing external libraries with different operating systems and configurations. @@ -350,7 +350,7 @@ with clear instructions on how to install the required libraries. Furthermore, if your package requires CGO, it MUST be able to compile and operate in a no-op mode or report a warning back to the collector with a clear error saying CGO is required to work. -### Breaking changes +## Breaking changes Whenever possible, we adhere to [semver](https://semver.org/) as our minimum standards. Even before v1, we strive not to break compatibility without a good reason. Hence, when a change is known to cause a breaking change, we intend to follow these principles: @@ -362,7 +362,7 @@ without a good reason. Hence, when a change is known to cause a breaking change, Not all changes have the same effects on users, so some of the steps may be unnecessary for some changes. -#### API breaking changes +### API breaking changes We strive to perform API breaking changes in two stages, deprecating it first (`vM.N`) and breaking it in a subsequent version (`vM.N+1`). @@ -385,7 +385,7 @@ package test func DoFoo() {} ``` -##### Example #1 - Renaming a function +#### Example #1 - Renaming a function 1. Current version `v0.N` has `func GetFoo() Bar` 1. We now decided that `GetBar` is a better name. As such, on `v0.N+1` we add a new `func GetBar() Bar` function, @@ -393,7 +393,7 @@ func DoFoo() {} warning is added to the old function, along with an entry to the changelog. 1. On `v0.N+2`, we MAY remove `func GetFoo() Bar`. -##### Example #2 - Changing the return values of a function +#### Example #2 - Changing the return values of a function 1. Current version `v0.N` has `func GetFoo() Foo` 1. We now need to also return an error. We do it by creating a new function that will be equivalent to the existing one @@ -402,7 +402,7 @@ func DoFoo() {} entry with a warning. 1. On `v0.N+2`, we change `func GetFoo() Foo` to `func GetFoo() (Foo, error)`. -##### Example #3 - Changing the arguments of a function +#### Example #3 - Changing the arguments of a function 1. Current version `v0.N` has `func GetFoo() Foo` 2. We now decide to do something that might be blocking as part of `func GetFoo() Foo`, so, we start accepting a @@ -412,7 +412,7 @@ func DoFoo() {} 3. On `v0.N+2`, we change `func GetFoo() Foo` to `func GetFoo(context.Context) Foo` if desired or remove it entirely if needed. -##### Exceptions +#### Exceptions For changes to modules that do not have a version of `v1` or higher, we may skip the deprecation process described above for the following situations. Note that these changes should still be recorded as breaking changes in the changelog. @@ -425,7 +425,7 @@ for the following situations. Note that these changes should still be recorded a breaking change. For this reason, the deprecation process should only be skipped when it is not expected that the function is commonly passed as a value. -#### End-user impacting changes +### End-user impacting changes For end user breaking changes, we follow the [feature gate](https://github.com/open-telemetry/opentelemetry-collector/tree/main/featuregate#feature-lifecycle) approach. This is a well-known approach in other projects such as Kubernetes. A feature gate has @@ -433,7 +433,7 @@ three stages: alpha, beta and stable. The intent of these stages is to decouple changes from the breaking change; some users may adopt the change early, while other users may delay its adoption. -##### Feature gate IDs +#### Feature gate IDs Feature gate IDs should be namespaced using dots to denote the hierarchy. The namespace should be as specific as possible; in particular, for feature gates specific to a certain component the ID should @@ -442,9 +442,9 @@ written with a verb that describes what happens when the feature gate is enabled you want to add a feature gate for the OTLP receiver that changes the default endpoint to bind to an unspecified host, you could name your feature gate `receiver.otlp.UseUnspecifiedHostAsDefaultHost`. -##### Lifecycle of a breaking change +#### Lifecycle of a breaking change -###### Alpha stage +##### Alpha stage At the alpha stage, the change is opt-in. At this stage we want to notify users that a change is coming, so they can start preparing for it and we have some early adopters that provide us with @@ -467,7 +467,7 @@ feedback. Consider the following items before the initial release of an alpha fe * (Optional) Try to **test this in a realistic setting.** If this solves an issue, ask the poster to try to use it and check that everything works. -###### Beta stage +##### Beta stage At the beta stage, the change is opt-out. At this stage we want to notify users that the change is happening, and help them understand how to revert back to the previous behavior temporarily if they @@ -487,7 +487,7 @@ following items before moving from alpha to beta: that can be temporarily reverted disabling the feature gate and points to any issue or docs about it. -###### Stable stage +##### Stable stage At the stable stage, the change cannot be reverted. In some cases, you may directly start here and just do the change, in which case you do not need a feature gate, but you should still follow the @@ -502,7 +502,7 @@ beta to stable: * Add one last **changelog entry** so users know the range where the feature gate was in beta * Amend the **error message** to remove any references to the feature gate. -### Specification Tracking +## Specification Tracking The [OpenTelemetry Specification](https://github.com/open-telemetry/opentelemetry-specification) can be a rapidly moving target at times. While it may seem efficient to get an early start on implementing new features or diff --git a/docs/release.md b/docs/release.md index 5e5d5c7e748..7a6aecb9be0 100644 --- a/docs/release.md +++ b/docs/release.md @@ -240,9 +240,8 @@ Once a module is ready to be released under the `1.x` version scheme, file a PR | 2025-02-17 | v0.120.0 | [@jpkrohling](https://github.com/jpkrohling) | | 2025-03-03 | v0.121.0 | [@mx-psi](https://github.com/mx-psi) | | 2025-03-17 | v0.122.0 | [@evan-bradley](https://github.com/evan-bradley) | -| 2025-03-31 | v0.123.0 | [@djaglowski](https://github.com/djaglowski) | -| 2025-04-14 | v0.124.0 | [@TylerHelmuth](https://github.com/TylerHelmuth) | -| 2025-04-28 | v0.125.0 | [@atoulme](https://github.com/atoulme) | -| 2025-05-12 | v0.126.0 | [@songy23](https://github.com/songy23) | -| 2025-05-26 | v0.127.0 | [@dmitryax](https://github.com/dmitryax) | -| 2025-06-09 | v0.118.0 | [@codeboten](https://github.com/codeboten) | +| 2025-03-31 | v0.123.0 | [@TylerHelmuth](https://github.com/TylerHelmuth) | +| 2025-04-14 | v0.124.0 | [@atoulme](https://github.com/atoulme) | +| 2025-04-28 | v0.125.0 | [@songy23](https://github.com/songy23) | +| 2025-05-12 | v0.126.0 | [@dmitryax](https://github.com/dmitryax) | +| 2025-05-26 | v0.127.0 | [@codeboten](https://github.com/codeboten) | diff --git a/docs/rfcs/metadata.yaml b/docs/rfcs/metadata.yaml new file mode 100644 index 00000000000..63ff8aa81d7 --- /dev/null +++ b/docs/rfcs/metadata.yaml @@ -0,0 +1,10 @@ +type: rfcs + +status: + class: docs + codeowners: + active: + - codeboten + - BogdanDrutu + - dmitryax + - mx-psi diff --git a/exporter/debugexporter/README.md b/exporter/debugexporter/README.md index dc52909c183..0bc4fca18c8 100644 --- a/exporter/debugexporter/README.md +++ b/exporter/debugexporter/README.md @@ -7,6 +7,7 @@ | Distributions | [core], [contrib], [k8s] | | Warnings | [Unstable Output Format](#warnings) | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fdebug%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fdebug) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fdebug%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fdebug) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@andrzej-stencel](https://www.github.com/andrzej-stencel) | [development]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/component-stability.md#development [core]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol diff --git a/exporter/debugexporter/go.mod b/exporter/debugexporter/go.mod index 16e42166ef4..cf17a7998c0 100644 --- a/exporter/debugexporter/go.mod +++ b/exporter/debugexporter/go.mod @@ -18,7 +18,7 @@ require ( go.opentelemetry.io/collector/pdata/testdata v0.119.0 go.uber.org/goleak v1.3.0 go.uber.org/zap v1.27.0 - golang.org/x/sys v0.29.0 + golang.org/x/sys v0.30.0 ) require ( @@ -63,7 +63,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/exporter/debugexporter/go.sum b/exporter/debugexporter/go.sum index 47db8db1b39..e87a7e6277a 100644 --- a/exporter/debugexporter/go.sum +++ b/exporter/debugexporter/go.sum @@ -89,8 +89,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ 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.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.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.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= @@ -107,8 +107,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/exporter/debugexporter/metadata.yaml b/exporter/debugexporter/metadata.yaml index aa7baef4c70..da3e3828354 100644 --- a/exporter/debugexporter/metadata.yaml +++ b/exporter/debugexporter/metadata.yaml @@ -2,6 +2,9 @@ type: debug github_project: open-telemetry/opentelemetry-collector status: + codeowners: + active: + - andrzej-stencel class: exporter stability: development: [traces, metrics, logs, profiles] diff --git a/exporter/exporterhelper/internal/base_exporter.go b/exporter/exporterhelper/internal/base_exporter.go index 494c3aa0c92..ccbe36c71b0 100644 --- a/exporter/exporterhelper/internal/base_exporter.go +++ b/exporter/exporterhelper/internal/base_exporter.go @@ -21,17 +21,9 @@ import ( "go.opentelemetry.io/collector/exporter/exporterbatcher" "go.opentelemetry.io/collector/exporter/exporterqueue" // BaseExporter contains common fields between different exporter types. "go.opentelemetry.io/collector/exporter/internal" - "go.opentelemetry.io/collector/featuregate" "go.opentelemetry.io/collector/pipeline" ) -var usePullingBasedExporterQueueBatcher = featuregate.GlobalRegistry().MustRegister( - "exporter.UsePullingBasedExporterQueueBatcher", - featuregate.StageAlpha, - featuregate.WithRegisterFromVersion("v0.115.0"), - featuregate.WithRegisterDescription("if set to true, turns on the pulling-based exporter queue bathcer"), -) - type ObsrepSenderFactory = func(obsrep *ObsReport, next Sender[internal.Request]) Sender[internal.Request] // Option apply changes to BaseExporter. @@ -52,7 +44,6 @@ type BaseExporter struct { // Chain of senders that the exporter helper applies before passing the data to the actual exporter. // The data is handled by each sender in the respective order starting from the queueSender. // Most of the senders are optional, and initialized with a no-op path-through sender. - BatchSender Sender[internal.Request] QueueSender Sender[internal.Request] ObsrepSender Sender[internal.Request] RetrySender Sender[internal.Request] @@ -75,8 +66,9 @@ func NewBaseExporter(set exporter.Settings, signal pipeline.Signal, osf ObsrepSe } be := &BaseExporter{ - timeoutCfg: NewDefaultTimeoutConfig(), - Set: set, + Set: set, + timeoutCfg: NewDefaultTimeoutConfig(), + queueFactory: exporterqueue.NewMemoryQueueFactory[internal.Request](), } for _, op := range options { @@ -100,16 +92,7 @@ func NewBaseExporter(set exporter.Settings, signal pipeline.Signal, osf ObsrepSe be.ConsumerOptions = append(be.ConsumerOptions, consumer.WithCapabilities(consumer.Capabilities{MutatesData: true})) } - if be.batcherCfg.Enabled && !(usePullingBasedExporterQueueBatcher.IsEnabled() && be.queueCfg.Enabled) { - concurrencyLimit := int64(0) - if be.queueCfg.Enabled { - concurrencyLimit = int64(be.queueCfg.NumConsumers) - } - be.BatchSender = NewBatchSender(be.batcherCfg, set, concurrencyLimit, be.firstSender) - be.firstSender = be.BatchSender - } - - if be.queueCfg.Enabled { + if be.queueCfg.Enabled || be.batcherCfg.Enabled { qSet := exporterqueue.Settings{ Signal: signal, ExporterSettings: set, @@ -126,10 +109,13 @@ func NewBaseExporter(set exporter.Settings, signal pipeline.Signal, osf ObsrepSe // Send sends the request using the first sender in the chain. func (be *BaseExporter) Send(ctx context.Context, req internal.Request) error { + // Have to read the number of items before sending the request since the request can + // be modified by the downstream components like the batcher. + itemsCount := req.ItemsCount() err := be.firstSender.Send(ctx, req) if err != nil { be.Set.Logger.Error("Exporting failed. Rejecting data."+be.ExportFailureMessage, - zap.Error(err), zap.Int("rejected_items", req.ItemsCount())) + zap.Error(err), zap.Int("rejected_items", itemsCount)) } return err } @@ -140,13 +126,6 @@ func (be *BaseExporter) Start(ctx context.Context, host component.Host) error { return err } - if be.BatchSender != nil { - // If no error then start the BatchSender. - if err := be.BatchSender.Start(ctx, host); err != nil { - return err - } - } - // Last start the queueSender. if be.QueueSender != nil { return be.QueueSender.Start(ctx, host) @@ -163,11 +142,6 @@ func (be *BaseExporter) Shutdown(ctx context.Context) error { err = multierr.Append(err, be.RetrySender.Shutdown(ctx)) } - // Then shutdown the batch sender - if be.BatchSender != nil { - err = multierr.Append(err, be.BatchSender.Shutdown(ctx)) - } - // Then shutdown the queue sender. if be.QueueSender != nil { err = multierr.Append(err, be.QueueSender.Shutdown(ctx)) diff --git a/exporter/exporterhelper/internal/batch_sender_test.go b/exporter/exporterhelper/internal/batch_sender_test.go index cb83005dc5b..d6b49745bc0 100644 --- a/exporter/exporterhelper/internal/batch_sender_test.go +++ b/exporter/exporterhelper/internal/batch_sender_test.go @@ -327,7 +327,9 @@ func TestBatchSender_PostShutdown(t *testing.T) { assert.Equal(t, int64(8), sink.ItemsCount()) }) } - runTest("enable_queue_batcher", true) + // This test is disabled because in the new batching, we still do the batching while shutdown because that will + // limit the number of request sent. + // runTest("enable_queue_batcher", true) runTest("disable_queue_batcher", false) } @@ -374,6 +376,14 @@ func TestBatchSender_ConcurrencyLimitReached(t *testing.T) { expectedItems: 51, }, } + + // Why do we not expect the same behavior when usePullingBasedExporterQueueBatcher is true? + // This test checks that when concurrency limit of batch_sender is reached, the batch_sender will flush immediately. + // To avoid blocking, the concurrency limit is set to the number of concurrent goroutines that are in charge of + // reading from the queue and adding to batch. With the new model, we are pulling instead of pushing so we don't + // block the reading goroutine anymore. + defer setFeatureGateForTest(t, usePullingBasedExporterQueueBatcher, false)() + for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { qCfg := exporterqueue.NewDefaultConfig() @@ -436,8 +446,7 @@ func TestBatchSender_BatchBlocking(t *testing.T) { defer setFeatureGateForTest(t, usePullingBasedExporterQueueBatcher, enableQueueBatcher)() bCfg := exporterbatcher.NewDefaultConfig() bCfg.MinSizeItems = 3 - be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender, - WithBatcher(bCfg)) + be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender, WithBatcher(bCfg)) require.NotNil(t, be) require.NoError(t, err) require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost())) @@ -449,8 +458,8 @@ func TestBatchSender_BatchBlocking(t *testing.T) { for i := 0; i < 6; i++ { wg.Add(1) go func() { + defer wg.Done() assert.NoError(t, be.Send(context.Background(), &requesttest.FakeRequest{Items: 1, Sink: sink, Delay: 10 * time.Millisecond})) - wg.Done() }() } wg.Wait() @@ -473,8 +482,7 @@ func TestBatchSender_BatchCancelled(t *testing.T) { defer setFeatureGateForTest(t, usePullingBasedExporterQueueBatcher, enableQueueBatcher)() bCfg := exporterbatcher.NewDefaultConfig() bCfg.MinSizeItems = 2 - be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender, - WithBatcher(bCfg)) + be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender, WithBatcher(bCfg)) require.NotNil(t, be) require.NoError(t, err) require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost())) @@ -486,14 +494,14 @@ func TestBatchSender_BatchCancelled(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) wg.Add(1) go func() { + defer wg.Done() assert.ErrorIs(t, be.Send(ctx, &requesttest.FakeRequest{Items: 1, Sink: sink, Delay: 100 * time.Millisecond}), context.Canceled) - wg.Done() }() wg.Add(1) go func() { - time.Sleep(20 * time.Millisecond) // ensure this call is the second + defer wg.Done() + time.Sleep(100 * time.Millisecond) // ensure this call is the second assert.ErrorIs(t, be.Send(context.Background(), &requesttest.FakeRequest{Items: 1, Sink: sink, Delay: 100 * time.Millisecond}), context.Canceled) - wg.Done() }() cancel() // canceling the first request should cancel the whole batch wg.Wait() diff --git a/exporter/exporterhelper/internal/metadata/generated_telemetry.go b/exporter/exporterhelper/internal/metadata/generated_telemetry.go index 28f03fdb7fe..ee4b20bf425 100644 --- a/exporter/exporterhelper/internal/metadata/generated_telemetry.go +++ b/exporter/exporterhelper/internal/metadata/generated_telemetry.go @@ -56,16 +56,6 @@ func (tbof telemetryBuilderOptionFunc) apply(mb *TelemetryBuilder) { tbof(mb) } -// Deprecated: [v0.119.0] use RegisterExporterQueueCapacityCallback. -func WithExporterQueueCapacityCallback(cb func() int64, opts ...metric.ObserveOption) TelemetryBuilderOption { - return telemetryBuilderOptionFunc(func(builder *TelemetryBuilder) { - builder.observeExporterQueueCapacity = func(_ context.Context, o metric.Observer) error { - o.ObserveInt64(builder.ExporterQueueCapacity, cb(), opts...) - return nil - } - }) -} - // RegisterExporterQueueCapacityCallback sets callback for observable ExporterQueueCapacity metric. func (builder *TelemetryBuilder) RegisterExporterQueueCapacityCallback(cb metric.Int64Callback) error { reg, err := builder.meter.RegisterCallback(func(ctx context.Context, o metric.Observer) error { @@ -81,16 +71,6 @@ func (builder *TelemetryBuilder) RegisterExporterQueueCapacityCallback(cb metric return nil } -// Deprecated: [v0.119.0] use RegisterExporterQueueSizeCallback. -func WithExporterQueueSizeCallback(cb func() int64, opts ...metric.ObserveOption) TelemetryBuilderOption { - return telemetryBuilderOptionFunc(func(builder *TelemetryBuilder) { - builder.observeExporterQueueSize = func(_ context.Context, o metric.Observer) error { - o.ObserveInt64(builder.ExporterQueueSize, cb(), opts...) - return nil - } - }) -} - // RegisterExporterQueueSizeCallback sets callback for observable ExporterQueueSize metric. func (builder *TelemetryBuilder) RegisterExporterQueueSizeCallback(cb metric.Int64Callback) error { reg, err := builder.meter.RegisterCallback(func(ctx context.Context, o metric.Observer) error { diff --git a/exporter/exporterhelper/internal/metadatatest/generated_telemetrytest.go b/exporter/exporterhelper/internal/metadatatest/generated_telemetrytest.go index 9619749ff3c..1bac70121dc 100644 --- a/exporter/exporterhelper/internal/metadatatest/generated_telemetrytest.go +++ b/exporter/exporterhelper/internal/metadatatest/generated_telemetrytest.go @@ -3,7 +3,6 @@ package metadatatest import ( - "context" "testing" "github.com/stretchr/testify/require" @@ -13,30 +12,6 @@ import ( "go.opentelemetry.io/collector/component/componenttest" ) -// Deprecated: [v0.119.0] Use componenttest.Telemetry -type Telemetry struct { - *componenttest.Telemetry -} - -// Deprecated: [v0.119.0] Use componenttest.NewTelemetry -func SetupTelemetry(opts ...componenttest.TelemetryOption) Telemetry { - return Telemetry{Telemetry: componenttest.NewTelemetry(opts...)} -} - -// Deprecated: [v0.119.0] Use metadatatest.AssertEqual* -func (tt *Telemetry) AssertMetrics(t *testing.T, expected []metricdata.Metrics, opts ...metricdatatest.Option) { - var md metricdata.ResourceMetrics - require.NoError(t, tt.Reader.Collect(context.Background(), &md)) - // ensure all required metrics are present - for _, want := range expected { - got := getMetricFromResource(want.Name, md) - metricdatatest.AssertEqual(t, want, got, opts...) - } - - // ensure no additional metrics are emitted - require.Equal(t, len(expected), lenMetrics(md)) -} - func AssertEqualExporterEnqueueFailedLogRecords(t *testing.T, tt *componenttest.Telemetry, dps []metricdata.DataPoint[int64], opts ...metricdatatest.Option) { want := metricdata.Metrics{ Name: "otelcol_exporter_enqueue_failed_log_records", diff --git a/exporter/exporterhelper/internal/metadatatest/generated_telemetrytest_test.go b/exporter/exporterhelper/internal/metadatatest/generated_telemetrytest_test.go index 1662b1b2bdb..d8faacd39c1 100644 --- a/exporter/exporterhelper/internal/metadatatest/generated_telemetrytest_test.go +++ b/exporter/exporterhelper/internal/metadatatest/generated_telemetrytest_test.go @@ -11,11 +11,12 @@ import ( "go.opentelemetry.io/otel/sdk/metric/metricdata" "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest" + "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadata" ) func TestSetupTelemetry(t *testing.T) { - testTel := SetupTelemetry() + testTel := componenttest.NewTelemetry() tb, err := metadata.NewTelemetryBuilder(testTel.NewTelemetrySettings()) require.NoError(t, err) defer tb.Shutdown() @@ -36,168 +37,37 @@ func TestSetupTelemetry(t *testing.T) { tb.ExporterSentLogRecords.Add(context.Background(), 1) tb.ExporterSentMetricPoints.Add(context.Background(), 1) tb.ExporterSentSpans.Add(context.Background(), 1) - - testTel.AssertMetrics(t, []metricdata.Metrics{ - { - Name: "otelcol_exporter_enqueue_failed_log_records", - Description: "Number of log records failed to be added to the sending queue. [alpha]", - Unit: "{records}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_exporter_enqueue_failed_metric_points", - Description: "Number of metric points failed to be added to the sending queue. [alpha]", - Unit: "{datapoints}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_exporter_enqueue_failed_spans", - Description: "Number of spans failed to be added to the sending queue. [alpha]", - Unit: "{spans}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_exporter_queue_capacity", - Description: "Fixed capacity of the retry queue (in batches) [alpha]", - Unit: "{batches}", - Data: metricdata.Gauge[int64]{ - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_exporter_queue_size", - Description: "Current size of the retry queue (in batches) [alpha]", - Unit: "{batches}", - Data: metricdata.Gauge[int64]{ - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_exporter_send_failed_log_records", - Description: "Number of log records in failed attempts to send to destination. [alpha]", - Unit: "{records}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_exporter_send_failed_metric_points", - Description: "Number of metric points in failed attempts to send to destination. [alpha]", - Unit: "{datapoints}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_exporter_send_failed_spans", - Description: "Number of spans in failed attempts to send to destination. [alpha]", - Unit: "{spans}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_exporter_sent_log_records", - Description: "Number of log record successfully sent to destination. [alpha]", - Unit: "{records}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_exporter_sent_metric_points", - Description: "Number of metric points successfully sent to destination. [alpha]", - Unit: "{datapoints}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_exporter_sent_spans", - Description: "Number of spans successfully sent to destination. [alpha]", - Unit: "{spans}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreValue()) - AssertEqualExporterEnqueueFailedLogRecords(t, testTel.Telemetry, + AssertEqualExporterEnqueueFailedLogRecords(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualExporterEnqueueFailedMetricPoints(t, testTel.Telemetry, + AssertEqualExporterEnqueueFailedMetricPoints(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualExporterEnqueueFailedSpans(t, testTel.Telemetry, + AssertEqualExporterEnqueueFailedSpans(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualExporterQueueCapacity(t, testTel.Telemetry, + AssertEqualExporterQueueCapacity(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualExporterQueueSize(t, testTel.Telemetry, + AssertEqualExporterQueueSize(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualExporterSendFailedLogRecords(t, testTel.Telemetry, + AssertEqualExporterSendFailedLogRecords(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualExporterSendFailedMetricPoints(t, testTel.Telemetry, + AssertEqualExporterSendFailedMetricPoints(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualExporterSendFailedSpans(t, testTel.Telemetry, + AssertEqualExporterSendFailedSpans(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualExporterSentLogRecords(t, testTel.Telemetry, + AssertEqualExporterSentLogRecords(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualExporterSentMetricPoints(t, testTel.Telemetry, + AssertEqualExporterSentMetricPoints(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualExporterSentSpans(t, testTel.Telemetry, + AssertEqualExporterSentSpans(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) diff --git a/exporter/exporterhelper/internal/obs_queue.go b/exporter/exporterhelper/internal/obs_queue.go index 594affd14bb..53cb8031454 100644 --- a/exporter/exporterhelper/internal/obs_queue.go +++ b/exporter/exporterhelper/internal/obs_queue.go @@ -71,6 +71,8 @@ func (or *obsQueue[T]) Shutdown(ctx context.Context) error { } func (or *obsQueue[T]) Offer(ctx context.Context, req T) error { + // Have to read the number of items before sending the request since the request can + // be modified by the downstream components like the batcher. numItems := req.ItemsCount() err := or.Queue.Offer(ctx, req) // No metrics recorded for profiles, remove enqueueFailedInst check with nil when profiles metrics available. diff --git a/exporter/exporterhelper/internal/obs_report_sender.go b/exporter/exporterhelper/internal/obs_report_sender.go index d33a43e0e0d..439fbdcb08d 100644 --- a/exporter/exporterhelper/internal/obs_report_sender.go +++ b/exporter/exporterhelper/internal/obs_report_sender.go @@ -22,6 +22,8 @@ func NewObsReportSender[K internal.Request](obsrep *ObsReport, next Sender[K]) S } func (ors *obsReportSender[K]) Send(ctx context.Context, req K) error { + // Have to read the number of items before sending the request since the request can + // be modified by the downstream components like the batcher. c := ors.obsrep.StartOp(ctx) items := req.ItemsCount() // Forward the data to the next consumer (this pusher is the next). diff --git a/exporter/exporterhelper/internal/queue_sender.go b/exporter/exporterhelper/internal/queue_sender.go index 876225a6420..093c39a5591 100644 --- a/exporter/exporterhelper/internal/queue_sender.go +++ b/exporter/exporterhelper/internal/queue_sender.go @@ -7,7 +7,6 @@ import ( "context" "errors" - "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.opentelemetry.io/collector/component" @@ -15,6 +14,14 @@ import ( "go.opentelemetry.io/collector/exporter/exporterqueue" "go.opentelemetry.io/collector/exporter/internal" "go.opentelemetry.io/collector/exporter/internal/queue" + "go.opentelemetry.io/collector/featuregate" +) + +var usePullingBasedExporterQueueBatcher = featuregate.GlobalRegistry().MustRegister( + "exporter.UsePullingBasedExporterQueueBatcher", + featuregate.StageBeta, + featuregate.WithRegisterFromVersion("v0.115.0"), + featuregate.WithRegisterDescription("if set to true, turns on the pulling-based exporter queue bathcer"), ) // QueueConfig defines configuration for queueing batches before sending to the consumerSender. @@ -68,6 +75,7 @@ func (qCfg *QueueConfig) Validate() error { type QueueSender struct { queue exporterqueue.Queue[internal.Request] batcher component.Component + bs *BatchSender } func NewQueueSender( @@ -78,22 +86,49 @@ func NewQueueSender( exportFailureMessage string, next Sender[internal.Request], ) (*QueueSender, error) { - exportFunc := func(ctx context.Context, req internal.Request) error { - err := next.Send(ctx, req) - if err != nil { - qSet.ExporterSettings.Logger.Error("Exporting failed. Dropping data."+exportFailureMessage, - zap.Error(err), zap.Int("dropped_items", req.ItemsCount())) - } - return err - } if !usePullingBasedExporterQueueBatcher.IsEnabled() { + concurrencyLimit := int64(0) + if qCfg.Enabled { + concurrencyLimit = int64(qCfg.NumConsumers) + } + + var bs *BatchSender + if bCfg.Enabled { + bs = NewBatchSender(bCfg, qSet.ExporterSettings, concurrencyLimit, next) + next = bs + } + + exportFunc := func(ctx context.Context, req internal.Request) error { + // Have to read the number of items before sending the request since the request can + // be modified by the downstream components like the batcher. + itemsCount := req.ItemsCount() + err := next.Send(ctx, req) + if err != nil { + qSet.ExporterSettings.Logger.Error("Exporting failed. Dropping data."+exportFailureMessage, + zap.Error(err), zap.Int("dropped_items", itemsCount)) + } + return err + } + q, err := newObsQueue(qSet, qf(context.Background(), qSet, qCfg, func(ctx context.Context, req internal.Request, done exporterqueue.Done) { done.OnDone(exportFunc(ctx, req)) })) if err != nil { return nil, err } - return &QueueSender{queue: q}, nil + return &QueueSender{queue: q, bs: bs}, nil + } + + exportFunc := func(ctx context.Context, req internal.Request) error { + // Have to read the number of items before sending the request since the request can + // be modified by the downstream components like the batcher. + itemsCount := req.ItemsCount() + err := next.Send(ctx, req) + if err != nil { + qSet.ExporterSettings.Logger.Error("Exporting failed. Dropping data."+exportFailureMessage, + zap.Error(err), zap.Int("dropped_items", itemsCount)) + } + return err } b, err := queue.NewBatcher(bCfg, exportFunc, qCfg.NumConsumers) @@ -114,6 +149,13 @@ func NewQueueSender( // Start is invoked during service startup. func (qs *QueueSender) Start(ctx context.Context, host component.Host) error { + if qs.bs != nil { + // If no error then start the BatchSender. + if err := qs.bs.Start(ctx, host); err != nil { + return err + } + } + if err := qs.queue.Start(ctx, host); err != nil { return err } @@ -127,9 +169,15 @@ func (qs *QueueSender) Start(ctx context.Context, host component.Host) error { // Shutdown is invoked during service shutdown. func (qs *QueueSender) Shutdown(ctx context.Context) error { + var err error + // Then shutdown the batch sender + if qs.bs != nil { + err = errors.Join(err, qs.bs.Shutdown(ctx)) + } + // Stop the queue and batcher, this will drain the queue and will call the retry (which is stopped) that will only // try once every request. - err := qs.queue.Shutdown(ctx) + err = errors.Join(err, qs.queue.Shutdown(ctx)) if usePullingBasedExporterQueueBatcher.IsEnabled() { return errors.Join(err, qs.batcher.Shutdown(ctx)) } @@ -138,18 +186,7 @@ func (qs *QueueSender) Shutdown(ctx context.Context) error { // Send implements the requestSender interface. It puts the request in the queue. func (qs *QueueSender) Send(ctx context.Context, req internal.Request) error { - // Prevent cancellation and deadline to propagate to the context stored in the queue. - // The grpc/http based receivers will cancel the request context after this function returns. - c := context.WithoutCancel(ctx) - - span := trace.SpanFromContext(c) - if err := qs.queue.Offer(c, req); err != nil { - span.AddEvent("Failed to enqueue item.") - return err - } - - span.AddEvent("Enqueued item.") - return nil + return qs.queue.Offer(ctx, req) } type MockHost struct { diff --git a/exporter/exporterhelper/metadata.yaml b/exporter/exporterhelper/metadata.yaml index fc6a372a15e..b9f4ef8b803 100644 --- a/exporter/exporterhelper/metadata.yaml +++ b/exporter/exporterhelper/metadata.yaml @@ -2,6 +2,10 @@ type: exporterhelper github_project: open-telemetry/opentelemetry-collector status: + codeowners: + active: + - BogdanDrutu + - dmitryax class: pkg stability: beta: [traces, metrics, logs] diff --git a/exporter/exporterhelper/xexporterhelper/go.mod b/exporter/exporterhelper/xexporterhelper/go.mod index e35bad93dcb..30ae8e7d5d2 100644 --- a/exporter/exporterhelper/xexporterhelper/go.mod +++ b/exporter/exporterhelper/xexporterhelper/go.mod @@ -37,7 +37,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/extension v0.119.0 // indirect go.opentelemetry.io/collector/extension/xextension v0.119.0 // indirect go.opentelemetry.io/collector/featuregate v1.25.0 // indirect @@ -54,7 +53,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -88,8 +87,6 @@ replace go.opentelemetry.io/collector/pdata => ../../../pdata replace go.opentelemetry.io/collector/exporter/xexporter => ../../xexporter -replace go.opentelemetry.io/collector/config/configtelemetry => ../../../config/configtelemetry - replace go.opentelemetry.io/collector/config/configretry => ../../../config/configretry replace go.opentelemetry.io/collector/pipeline/xpipeline => ../../../pipeline/xpipeline diff --git a/exporter/exporterhelper/xexporterhelper/go.sum b/exporter/exporterhelper/xexporterhelper/go.sum index a3cacda0f2f..93e6b13dd38 100644 --- a/exporter/exporterhelper/xexporterhelper/go.sum +++ b/exporter/exporterhelper/xexporterhelper/go.sum @@ -95,8 +95,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/exporter/exporterhelper/xexporterhelper/metadata.yaml b/exporter/exporterhelper/xexporterhelper/metadata.yaml new file mode 100644 index 00000000000..a744ab91d31 --- /dev/null +++ b/exporter/exporterhelper/xexporterhelper/metadata.yaml @@ -0,0 +1,10 @@ +type: xexporterhelper + +status: + class: exporter + codeowners: + active: + - mx-psi + - dmathieu + stability: + development: [profiles] diff --git a/exporter/exporterqueue/consumers.go b/exporter/exporterqueue/async_queue.go similarity index 63% rename from exporter/exporterqueue/consumers.go rename to exporter/exporterqueue/async_queue.go index 022f04b9310..d430c769d0d 100644 --- a/exporter/exporterqueue/consumers.go +++ b/exporter/exporterqueue/async_queue.go @@ -7,18 +7,20 @@ import ( "context" "sync" + "go.opentelemetry.io/otel/trace" + "go.opentelemetry.io/collector/component" ) -type consumerQueue[T any] struct { +type asyncQueue[T any] struct { readableQueue[T] numConsumers int consumeFunc ConsumeFunc[T] stopWG sync.WaitGroup } -func newConsumerQueue[T any](q readableQueue[T], numConsumers int, consumeFunc ConsumeFunc[T]) *consumerQueue[T] { - return &consumerQueue[T]{ +func newAsyncQueue[T any](q readableQueue[T], numConsumers int, consumeFunc ConsumeFunc[T]) Queue[T] { + return &asyncQueue[T]{ readableQueue: q, numConsumers: numConsumers, consumeFunc: consumeFunc, @@ -26,7 +28,7 @@ func newConsumerQueue[T any](q readableQueue[T], numConsumers int, consumeFunc C } // Start ensures that queue and all consumers are started. -func (qc *consumerQueue[T]) Start(ctx context.Context, host component.Host) error { +func (qc *asyncQueue[T]) Start(ctx context.Context, host component.Host) error { if err := qc.readableQueue.Start(ctx, host); err != nil { return err } @@ -51,8 +53,19 @@ func (qc *consumerQueue[T]) Start(ctx context.Context, host component.Host) erro return nil } +func (qc *asyncQueue[T]) Offer(ctx context.Context, req T) error { + span := trace.SpanFromContext(ctx) + if err := qc.readableQueue.Offer(ctx, req); err != nil { + span.AddEvent("Failed to enqueue item.") + return err + } + + span.AddEvent("Enqueued item.") + return nil +} + // Shutdown ensures that queue and all consumers are stopped. -func (qc *consumerQueue[T]) Shutdown(ctx context.Context) error { +func (qc *asyncQueue[T]) Shutdown(ctx context.Context) error { err := qc.readableQueue.Shutdown(ctx) qc.stopWG.Wait() return err diff --git a/exporter/exporterqueue/async_queue_test.go b/exporter/exporterqueue/async_queue_test.go new file mode 100644 index 00000000000..89d8bf48d9a --- /dev/null +++ b/exporter/exporterqueue/async_queue_test.go @@ -0,0 +1,104 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package exporterqueue + +import ( + "context" + "sync" + "sync/atomic" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "go.opentelemetry.io/collector/component/componenttest" +) + +func TestAsyncMemoryQueue(t *testing.T) { + consumed := &atomic.Int64{} + ac := newAsyncQueue(newMemoryQueue[int64](memoryQueueSettings[int64]{sizer: sizerInt64{}, capacity: 100}), + 1, func(_ context.Context, _ int64, done Done) { + consumed.Add(1) + done.OnDone(nil) + }) + require.NoError(t, ac.Start(context.Background(), componenttest.NewNopHost())) + for j := 0; j < 10; j++ { + require.NoError(t, ac.Offer(context.Background(), 10)) + } + require.NoError(t, ac.Shutdown(context.Background())) + assert.EqualValues(t, 10, consumed.Load()) +} + +func TestAsyncMemoryQueueBlocking(t *testing.T) { + consumed := &atomic.Int64{} + ac := newAsyncQueue( + newMemoryQueue[int64](memoryQueueSettings[int64]{sizer: sizerInt64{}, capacity: 100, blocking: true}), + 4, func(_ context.Context, _ int64, done Done) { + consumed.Add(1) + done.OnDone(nil) + }) + require.NoError(t, ac.Start(context.Background(), componenttest.NewNopHost())) + wg := &sync.WaitGroup{} + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + defer wg.Done() + for j := 0; j < 100_000; j++ { + assert.NoError(t, ac.Offer(context.Background(), 10)) + } + }() + } + wg.Wait() + require.NoError(t, ac.Shutdown(context.Background())) + assert.EqualValues(t, 1_000_000, consumed.Load()) +} + +func TestAsyncMemoryQueueBlockingCancelled(t *testing.T) { + stop := make(chan struct{}) + ac := newAsyncQueue( + newMemoryQueue[int64](memoryQueueSettings[int64]{sizer: sizerInt64{}, capacity: 10, blocking: true}), + 1, func(_ context.Context, _ int64, done Done) { + <-stop + done.OnDone(nil) + }) + require.NoError(t, ac.Start(context.Background(), componenttest.NewNopHost())) + + ctx, cancel := context.WithCancel(context.Background()) + wg := sync.WaitGroup{} + wg.Add(1) + go func() { + defer wg.Done() + for j := 0; j < 11; j++ { + assert.NoError(t, ac.Offer(ctx, 1)) + } + assert.ErrorIs(t, ac.Offer(ctx, 3), context.Canceled) + }() + // Sleep some time so that the go-routine blocks, it doesn't have to but even if it + // does things will work. + <-time.After(1 * time.Second) + cancel() + wg.Wait() + + close(stop) + require.NoError(t, ac.Shutdown(context.Background())) +} + +func BenchmarkAsyncMemoryQueue(b *testing.B) { + q := newMemoryQueue[int64](memoryQueueSettings[int64]{sizer: sizerInt64{}, capacity: int64(10 * b.N)}) + consumed := &atomic.Int64{} + require.NoError(b, q.Start(context.Background(), componenttest.NewNopHost())) + ac := newAsyncQueue(q, 1, func(_ context.Context, _ int64, done Done) { + consumed.Add(1) + done.OnDone(nil) + }) + require.NoError(b, ac.Start(context.Background(), componenttest.NewNopHost())) + b.ResetTimer() + b.ReportAllocs() + for j := 0; j < b.N; j++ { + require.NoError(b, q.Offer(context.Background(), 10)) + } + require.NoError(b, ac.Shutdown(context.Background())) + assert.EqualValues(b, b.N, consumed.Load()) +} diff --git a/exporter/exporterqueue/bounded_memory_queue.go b/exporter/exporterqueue/bounded_memory_queue.go deleted file mode 100644 index bd7b22a9d24..00000000000 --- a/exporter/exporterqueue/bounded_memory_queue.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright The OpenTelemetry Authors -// Copyright (c) 2019 The Jaeger Authors. -// Copyright (c) 2017 Uber Technologies, Inc. -// SPDX-License-Identifier: Apache-2.0 - -package exporterqueue // import "go.opentelemetry.io/collector/exporter/exporterqueue" - -import ( - "context" - - "go.opentelemetry.io/collector/component" -) - -type noopDone struct{} - -func (*noopDone) OnDone(error) {} - -var noopDoneInst = &noopDone{} - -// boundedMemoryQueue implements a producer-consumer exchange similar to a ring buffer queue, -// where the queue is bounded and if it fills up due to slow consumers, the new items written by -// the producer are dropped. -type boundedMemoryQueue[T any] struct { - component.StartFunc - *sizedQueue[T] -} - -// memoryQueueSettings defines internal parameters for boundedMemoryQueue creation. -type memoryQueueSettings[T any] struct { - sizer sizer[T] - capacity int64 - blocking bool -} - -// newBoundedMemoryQueue constructs the new queue of specified capacity, and with an optional -// callback for dropped items (e.g. useful to emit metrics). -func newBoundedMemoryQueue[T any](set memoryQueueSettings[T]) readableQueue[T] { - return &boundedMemoryQueue[T]{ - sizedQueue: newSizedQueue[T](set.capacity, set.sizer, set.blocking), - } -} - -func (q *boundedMemoryQueue[T]) Read(context.Context) (context.Context, T, Done, bool) { - ctx, req, ok := q.sizedQueue.pop() - return ctx, req, noopDoneInst, ok -} diff --git a/exporter/exporterqueue/bounded_memory_queue_test.go b/exporter/exporterqueue/bounded_memory_queue_test.go deleted file mode 100644 index ef30d938ae8..00000000000 --- a/exporter/exporterqueue/bounded_memory_queue_test.go +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright The OpenTelemetry Authors -// Copyright (c) 2019 The Jaeger Authors. -// Copyright (c) 2017 Uber Technologies, Inc. -// SPDX-License-Identifier: Apache-2.0 - -package exporterqueue - -import ( - "context" - "strconv" - "sync" - "sync/atomic" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "go.opentelemetry.io/collector/component/componenttest" -) - -// In this test we run a queue with capacity 1 and a single consumer. -// We want to test the overflow behavior, so we block the consumer -// by holding a startLock before submitting items to the queue. -func TestBoundedQueue(t *testing.T) { - q := newBoundedMemoryQueue[string](memoryQueueSettings[string]{sizer: &requestSizer[string]{}, capacity: 1}) - - require.NoError(t, q.Offer(context.Background(), "a")) - - numConsumed := 0 - assert.True(t, consume(q, func(_ context.Context, item string) error { - assert.Equal(t, "a", item) - numConsumed++ - return nil - })) - assert.Equal(t, 1, numConsumed) - assert.Equal(t, int64(0), q.Size()) - - // produce two more items. The first one should be accepted, but not consumed. - require.NoError(t, q.Offer(context.Background(), "b")) - assert.Equal(t, int64(1), q.Size()) - - // the second should be rejected since the queue is full - require.ErrorIs(t, q.Offer(context.Background(), "c"), ErrQueueIsFull) - assert.Equal(t, int64(1), q.Size()) - - assert.True(t, consume(q, func(_ context.Context, item string) error { - assert.Equal(t, "b", item) - numConsumed++ - return nil - })) - assert.Equal(t, 2, numConsumed) - - for _, toAddItem := range []string{"d", "e", "f"} { - require.NoError(t, q.Offer(context.Background(), toAddItem)) - assert.True(t, consume(q, func(_ context.Context, item string) error { - assert.Equal(t, toAddItem, item) - numConsumed++ - return nil - })) - } - assert.Equal(t, 5, numConsumed) - require.NoError(t, q.Shutdown(context.Background())) - assert.False(t, consume(q, func(_ context.Context, item string) error { - panic(item) - })) -} - -// In this test we run a queue with many items and a slow consumer. -// When the queue is stopped, the remaining items should be processed. -// Due to the way q.Stop() waits for all consumers to finish, the -// same lock strategy use above will not work, as calling Unlock -// only after Stop will mean the consumers are still locked while -// trying to perform the final consumptions. -func TestShutdownWhileNotEmpty(t *testing.T) { - q := newBoundedMemoryQueue[string](memoryQueueSettings[string]{sizer: &requestSizer[string]{}, capacity: 1000}) - - require.NoError(t, q.Start(context.Background(), componenttest.NewNopHost())) - for i := 0; i < 10; i++ { - require.NoError(t, q.Offer(context.Background(), strconv.FormatInt(int64(i), 10))) - } - require.NoError(t, q.Shutdown(context.Background())) - - assert.Equal(t, int64(10), q.Size()) - numConsumed := 0 - for i := 0; i < 10; i++ { - assert.True(t, consume(q, func(_ context.Context, item string) error { - assert.Equal(t, strconv.FormatInt(int64(i), 10), item) - numConsumed++ - return nil - })) - } - assert.Equal(t, 10, numConsumed) - assert.Equal(t, int64(0), q.Size()) - - assert.False(t, consume(q, func(_ context.Context, item string) error { - panic(item) - })) -} - -func TestQueueUsage(t *testing.T) { - tests := []struct { - name string - sizer sizer[uint64] - }{ - { - name: "requests_based", - sizer: &requestSizer[uint64]{}, - }, - { - name: "items_based", - sizer: &itemsSizer{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - q := newBoundedMemoryQueue[uint64](memoryQueueSettings[uint64]{sizer: tt.sizer, capacity: int64(100)}) - consumed := &atomic.Int64{} - ac := newConsumerQueue(q, 1, func(_ context.Context, _ uint64, done Done) { - consumed.Add(1) - done.OnDone(nil) - }) - require.NoError(t, ac.Start(context.Background(), componenttest.NewNopHost())) - for j := 0; j < 10; j++ { - require.NoError(t, q.Offer(context.Background(), uint64(10))) - } - require.NoError(t, ac.Shutdown(context.Background())) - assert.Equal(t, int64(10), consumed.Load()) - }) - } -} - -func TestBlockingQueueUsage(t *testing.T) { - tests := []struct { - name string - sizer sizer[uint64] - }{ - { - name: "requests_based", - sizer: &requestSizer[uint64]{}, - }, - { - name: "items_based", - sizer: &itemsSizer{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - q := newBoundedMemoryQueue[uint64](memoryQueueSettings[uint64]{sizer: tt.sizer, capacity: int64(100), blocking: true}) - consumed := &atomic.Int64{} - ac := newConsumerQueue(q, 10, func(_ context.Context, _ uint64, done Done) { - consumed.Add(1) - done.OnDone(nil) - }) - require.NoError(t, ac.Start(context.Background(), componenttest.NewNopHost())) - wg := &sync.WaitGroup{} - for i := 0; i < 10; i++ { - wg.Add(1) - go func() { - defer wg.Done() - for j := 0; j < 100_000; j++ { - assert.NoError(t, q.Offer(context.Background(), uint64(10))) - } - }() - } - wg.Wait() - require.NoError(t, ac.Shutdown(context.Background())) - assert.Equal(t, int64(1_000_000), consumed.Load()) - }) - } -} - -func TestZeroSizeNoConsumers(t *testing.T) { - q := newBoundedMemoryQueue[string](memoryQueueSettings[string]{sizer: &requestSizer[string]{}, capacity: 0}) - err := q.Start(context.Background(), componenttest.NewNopHost()) - require.NoError(t, err) - require.ErrorIs(t, q.Offer(context.Background(), "a"), ErrQueueIsFull) // in process - assert.NoError(t, q.Shutdown(context.Background())) -} - -func consume[T any](q readableQueue[T], consumeFunc func(context.Context, T) error) bool { - ctx, req, done, ok := q.Read(context.Background()) - if !ok { - return false - } - done.OnDone(consumeFunc(ctx, req)) - return true -} - -func BenchmarkOffer(b *testing.B) { - tests := []struct { - name string - sizer sizer[uint64] - }{ - { - name: "requests_based", - sizer: &requestSizer[uint64]{}, - }, - { - name: "items_based", - sizer: &itemsSizer{}, - }, - } - for _, tt := range tests { - b.Run(tt.name, func(b *testing.B) { - q := newBoundedMemoryQueue[uint64](memoryQueueSettings[uint64]{sizer: tt.sizer, capacity: int64(10 * b.N)}) - consumed := &atomic.Int64{} - require.NoError(b, q.Start(context.Background(), componenttest.NewNopHost())) - ac := newConsumerQueue(q, 1, func(_ context.Context, _ uint64, done Done) { - consumed.Add(1) - done.OnDone(nil) - }) - require.NoError(b, ac.Start(context.Background(), componenttest.NewNopHost())) - b.ResetTimer() - b.ReportAllocs() - for j := 0; j < b.N; j++ { - require.NoError(b, q.Offer(context.Background(), uint64(10))) - } - require.NoError(b, ac.Shutdown(context.Background())) - assert.Equal(b, int64(b.N), consumed.Load()) - }) - } -} diff --git a/exporter/exporterqueue/disabled_queue.go b/exporter/exporterqueue/disabled_queue.go new file mode 100644 index 00000000000..0033ed3014c --- /dev/null +++ b/exporter/exporterqueue/disabled_queue.go @@ -0,0 +1,67 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package exporterqueue // import "go.opentelemetry.io/collector/exporter/exporterqueue" + +import ( + "context" + "sync" + "sync/atomic" + + "go.opentelemetry.io/collector/component" +) + +var donePool = sync.Pool{ + New: func() any { + return &blockingDone{ch: make(chan error, 1)} + }, +} + +func newDisabledQueue[T any](consumeFunc ConsumeFunc[T]) Queue[T] { + return &disabledQueue[T]{ + consumeFunc: consumeFunc, + size: &atomic.Int64{}, + } +} + +type disabledQueue[T any] struct { + component.StartFunc + component.ShutdownFunc + consumeFunc ConsumeFunc[T] + size *atomic.Int64 +} + +func (d *disabledQueue[T]) Offer(ctx context.Context, req T) error { + done := donePool.Get().(*blockingDone) + d.size.Add(1) + d.consumeFunc(ctx, req, done) + defer d.size.Add(-1) + // Only re-add the blockingDone instance back to the pool if successfully received the + // message from the consumer which guarantees consumer will not use that anymore, + // otherwise no guarantee about when the consumer will add the message to the channel so cannot reuse or close. + select { + case doneErr := <-done.ch: + donePool.Put(done) + return doneErr + case <-ctx.Done(): + return ctx.Err() + } +} + +// Size returns the current number of blocked requests waiting to be processed. +func (d *disabledQueue[T]) Size() int64 { + return d.size.Load() +} + +// Capacity returns the capacity of this queue, which is 0 that means no bounds. +func (d *disabledQueue[T]) Capacity() int64 { + return 0 +} + +type blockingDone struct { + ch chan error +} + +func (d *blockingDone) OnDone(err error) { + d.ch <- err +} diff --git a/exporter/exporterqueue/disabled_queue_test.go b/exporter/exporterqueue/disabled_queue_test.go new file mode 100644 index 00000000000..ec1564e06c9 --- /dev/null +++ b/exporter/exporterqueue/disabled_queue_test.go @@ -0,0 +1,180 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package exporterqueue + +import ( + "context" + "errors" + "sync" + "sync/atomic" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "go.opentelemetry.io/collector/component/componenttest" +) + +func TestDisabledPassErrorBack(t *testing.T) { + myErr := errors.New("test error") + q := newDisabledQueue[int64](func(_ context.Context, _ int64, done Done) { + done.OnDone(myErr) + }) + require.NoError(t, q.Start(context.Background(), componenttest.NewNopHost())) + require.ErrorIs(t, q.Offer(context.Background(), int64(1)), myErr) + require.NoError(t, q.Shutdown(context.Background())) +} + +func TestDisabledCancelIncomingRequest(t *testing.T) { + wg := sync.WaitGroup{} + stop := make(chan struct{}) + q := newDisabledQueue[int64](func(_ context.Context, _ int64, done Done) { + wg.Add(1) + go func() { + defer wg.Done() + <-stop + done.OnDone(nil) + }() + }) + require.NoError(t, q.Start(context.Background(), componenttest.NewNopHost())) + ctx, cancel := context.WithCancel(context.Background()) + wg.Add(1) + go func() { + defer wg.Done() + <-time.After(time.Second) + cancel() + }() + require.ErrorIs(t, q.Offer(ctx, int64(1)), context.Canceled) + close(stop) + require.NoError(t, q.Shutdown(context.Background())) + wg.Wait() +} + +func TestDisabledSizeAndCapacity(t *testing.T) { + wg := sync.WaitGroup{} + stop := make(chan struct{}) + q := newDisabledQueue[int64](func(_ context.Context, _ int64, done Done) { + wg.Add(1) + go func() { + defer wg.Done() + <-stop + done.OnDone(nil) + }() + }) + require.NoError(t, q.Start(context.Background(), componenttest.NewNopHost())) + assert.EqualValues(t, 0, q.Size()) + assert.EqualValues(t, 0, q.Capacity()) + wg.Add(1) + go func() { + defer wg.Done() + assert.NoError(t, q.Offer(context.Background(), int64(1))) + }() + assert.Eventually(t, func() bool { return q.Size() == 1 }, 1*time.Second, 10*time.Millisecond) + assert.EqualValues(t, 0, q.Capacity()) + close(stop) + require.NoError(t, q.Shutdown(context.Background())) + wg.Wait() +} + +func TestDisabledQueueMultiThread(t *testing.T) { + buf := newBuffer() + buf.start() + q := newDisabledQueue[int64](buf.consume) + require.NoError(t, q.Start(context.Background(), componenttest.NewNopHost())) + wg := sync.WaitGroup{} + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + defer wg.Done() + for j := 0; j < 10_000; j++ { + assert.NoError(t, q.Offer(context.Background(), int64(j))) + } + }() + } + wg.Wait() + require.NoError(t, q.Shutdown(context.Background())) + buf.shutdown() + assert.Equal(t, int64(10*10_000), buf.consumed()) +} + +func BenchmarkDisabledQueueOffer(b *testing.B) { + consumed := &atomic.Int64{} + q := newDisabledQueue[int64](func(_ context.Context, _ int64, done Done) { + consumed.Add(1) + done.OnDone(nil) + }) + require.NoError(b, q.Start(context.Background(), componenttest.NewNopHost())) + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + require.NoError(b, q.Offer(context.Background(), int64(i))) + } + require.NoError(b, q.Shutdown(context.Background())) + assert.Equal(b, int64(b.N), consumed.Load()) +} + +const flushNum = 5 + +type buffer struct { + ch chan Done + nr *atomic.Int64 + wg sync.WaitGroup + dones []Done +} + +func newBuffer() *buffer { + buf := &buffer{ + ch: make(chan Done, 10), + nr: &atomic.Int64{}, + dones: make([]Done, 0, flushNum), + } + return buf +} + +func (buf *buffer) consume(_ context.Context, _ int64, done Done) { + buf.ch <- done +} + +func (buf *buffer) start() { + buf.wg.Add(1) + go func() { + defer buf.wg.Done() + buf.dones = make([]Done, 0, flushNum) + for { + select { + case done, ok := <-buf.ch: + if !ok { + return + } + buf.dones = append(buf.dones, done) + if len(buf.dones) == flushNum { + buf.flush() + } + case <-time.After(10 * time.Millisecond): + buf.flush() + } + } + }() +} + +func (buf *buffer) shutdown() { + close(buf.ch) + buf.wg.Wait() +} + +func (buf *buffer) flush() { + if len(buf.dones) == 0 { + return + } + buf.nr.Add(int64(len(buf.dones))) + for _, done := range buf.dones { + done.OnDone(nil) + } + buf.dones = buf.dones[:0] +} + +func (buf *buffer) consumed() int64 { + return buf.nr.Load() +} diff --git a/exporter/exporterqueue/sized_queue.go b/exporter/exporterqueue/memory_queue.go similarity index 65% rename from exporter/exporterqueue/sized_queue.go rename to exporter/exporterqueue/memory_queue.go index 20f0809abc2..ff421c5b78d 100644 --- a/exporter/exporterqueue/sized_queue.go +++ b/exporter/exporterqueue/memory_queue.go @@ -7,46 +7,22 @@ import ( "context" "errors" "sync" + + "go.opentelemetry.io/collector/component" ) var errInvalidSize = errors.New("invalid element size") -type node[T any] struct { - ctx context.Context - data T - size int64 - next *node[T] -} - -type linkedQueue[T any] struct { - head *node[T] - tail *node[T] -} - -func (l *linkedQueue[T]) push(ctx context.Context, data T, size int64) { - n := &node[T]{ctx: ctx, data: data, size: size} - if l.tail == nil { - l.head = n - l.tail = n - return - } - l.tail.next = n - l.tail = n -} - -func (l *linkedQueue[T]) pop() (context.Context, T, int64) { - n := l.head - l.head = n.next - if l.head == nil { - l.tail = nil - } - n.next = nil - return n.ctx, n.data, n.size +// memoryQueueSettings defines internal parameters for boundedMemoryQueue creation. +type memoryQueueSettings[T any] struct { + sizer sizer[T] + capacity int64 + blocking bool } -// sizedQueue is a channel wrapper for sized elements with a capacity set to a total size of all the elements. -// The channel will accept elements until the total size of the elements reaches the capacity. -type sizedQueue[T any] struct { +// memoryQueue is an in-memory implementation of a Queue. +type memoryQueue[T any] struct { + component.StartFunc sizer sizer[T] cap int64 @@ -59,14 +35,14 @@ type sizedQueue[T any] struct { blocking bool } -// newSizedQueue creates a sized elements channel. Each element is assigned a size by the provided sizer. +// newMemoryQueue creates a sized elements channel. Each element is assigned a size by the provided sizer. // capacity is the capacity of the queue. -func newSizedQueue[T any](capacity int64, sizer sizer[T], blocking bool) *sizedQueue[T] { - sq := &sizedQueue[T]{ - sizer: sizer, - cap: capacity, +func newMemoryQueue[T any](set memoryQueueSettings[T]) readableQueue[T] { + sq := &memoryQueue[T]{ + sizer: set.sizer, + cap: set.capacity, items: &linkedQueue[T]{}, - blocking: blocking, + blocking: set.blocking, } sq.hasMoreElements = sync.NewCond(&sq.mu) sq.hasMoreSpace = newCond(&sq.mu) @@ -75,7 +51,7 @@ func newSizedQueue[T any](capacity int64, sizer sizer[T], blocking bool) *sizedQ // Offer puts the element into the queue with the given sized if there is enough capacity. // Returns an error if the queue is full. -func (sq *sizedQueue[T]) Offer(ctx context.Context, el T) error { +func (sq *memoryQueue[T]) Offer(ctx context.Context, el T) error { elSize := sq.sizer.Sizeof(el) if elSize == 0 { return nil @@ -99,16 +75,18 @@ func (sq *sizedQueue[T]) Offer(ctx context.Context, el T) error { } sq.size += elSize - sq.items.push(ctx, el, elSize) + // Prevent cancellation and deadline to propagate to the context stored in the queue. + // The grpc/http based receivers will cancel the request context after this function returns. + sq.items.push(context.WithoutCancel(ctx), el, elSize) // Signal one consumer if any. sq.hasMoreElements.Signal() return nil } -// pop removes the element from the queue and returns it. +// Read removes the element from the queue and returns it. // The call blocks until there is an item available or the queue is stopped. // The function returns true when an item is consumed or false if the queue is stopped and emptied. -func (sq *sizedQueue[T]) pop() (context.Context, T, bool) { +func (sq *memoryQueue[T]) Read(context.Context) (context.Context, T, Done, bool) { sq.mu.Lock() defer sq.mu.Unlock() @@ -117,12 +95,12 @@ func (sq *sizedQueue[T]) pop() (context.Context, T, bool) { elCtx, el, elSize := sq.items.pop() sq.size -= elSize sq.hasMoreSpace.Signal() - return elCtx, el, true + return elCtx, el, noopDoneInst, true } if sq.stopped { var el T - return context.Background(), el, false + return context.Background(), el, nil, false } // TODO: Need to change the Queue interface to return an error to allow distinguish between shutdown and context canceled. @@ -132,7 +110,7 @@ func (sq *sizedQueue[T]) pop() (context.Context, T, bool) { } // Shutdown closes the queue channel to initiate draining of the queue. -func (sq *sizedQueue[T]) Shutdown(context.Context) error { +func (sq *memoryQueue[T]) Shutdown(context.Context) error { sq.mu.Lock() defer sq.mu.Unlock() sq.stopped = true @@ -140,12 +118,51 @@ func (sq *sizedQueue[T]) Shutdown(context.Context) error { return nil } -func (sq *sizedQueue[T]) Size() int64 { +func (sq *memoryQueue[T]) Size() int64 { sq.mu.Lock() defer sq.mu.Unlock() return sq.size } -func (sq *sizedQueue[T]) Capacity() int64 { +func (sq *memoryQueue[T]) Capacity() int64 { return sq.cap } + +type node[T any] struct { + ctx context.Context + data T + size int64 + next *node[T] +} + +type linkedQueue[T any] struct { + head *node[T] + tail *node[T] +} + +func (l *linkedQueue[T]) push(ctx context.Context, data T, size int64) { + n := &node[T]{ctx: ctx, data: data, size: size} + if l.tail == nil { + l.head = n + l.tail = n + return + } + l.tail.next = n + l.tail = n +} + +func (l *linkedQueue[T]) pop() (context.Context, T, int64) { + n := l.head + l.head = n.next + if l.head == nil { + l.tail = nil + } + n.next = nil + return n.ctx, n.data, n.size +} + +type noopDone struct{} + +func (*noopDone) OnDone(error) {} + +var noopDoneInst = &noopDone{} diff --git a/exporter/exporterqueue/memory_queue_test.go b/exporter/exporterqueue/memory_queue_test.go new file mode 100644 index 00000000000..d945ad99189 --- /dev/null +++ b/exporter/exporterqueue/memory_queue_test.go @@ -0,0 +1,116 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package exporterqueue + +import ( + "context" + "sync" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +type sizerInt64 struct{} + +func (s sizerInt64) Sizeof(el int64) int64 { + return el +} + +func TestMemoryQueue(t *testing.T) { + q := newMemoryQueue[int64](memoryQueueSettings[int64]{sizer: sizerInt64{}, capacity: 7}) + require.NoError(t, q.Offer(context.Background(), 1)) + assert.EqualValues(t, 1, q.Size()) + assert.EqualValues(t, 7, q.Capacity()) + + require.NoError(t, q.Offer(context.Background(), 3)) + assert.EqualValues(t, 4, q.Size()) + + // should not be able to send to the full queue + require.ErrorIs(t, q.Offer(context.Background(), 4), ErrQueueIsFull) + assert.EqualValues(t, 4, q.Size()) + + assert.True(t, consume(q, func(_ context.Context, el int64) error { + assert.EqualValues(t, 1, el) + return nil + })) + assert.EqualValues(t, 3, q.Size()) + + assert.True(t, consume(q, func(_ context.Context, el int64) error { + assert.EqualValues(t, 3, el) + return nil + })) + assert.EqualValues(t, 0, q.Size()) + + require.NoError(t, q.Shutdown(context.Background())) + assert.False(t, consume(q, func(context.Context, int64) error { t.FailNow(); return nil })) +} + +func TestMemoryQueueBlockingCancelled(t *testing.T) { + q := newMemoryQueue[int64](memoryQueueSettings[int64]{sizer: sizerInt64{}, capacity: 5, blocking: true}) + require.NoError(t, q.Offer(context.Background(), 3)) + ctx, cancel := context.WithCancel(context.Background()) + wg := sync.WaitGroup{} + wg.Add(1) + go func() { + defer wg.Done() + assert.ErrorIs(t, q.Offer(ctx, 3), context.Canceled) + }() + cancel() + wg.Wait() + assert.EqualValues(t, 3, q.Size()) + assert.True(t, consume(q, func(_ context.Context, el int64) error { + assert.EqualValues(t, 3, el) + return nil + })) + require.NoError(t, q.Shutdown(context.Background())) +} + +func TestMemoryQueueDrainWhenShutdown(t *testing.T) { + q := newMemoryQueue[int64](memoryQueueSettings[int64]{sizer: sizerInt64{}, capacity: 7}) + require.NoError(t, q.Offer(context.Background(), 1)) + require.NoError(t, q.Offer(context.Background(), 3)) + + assert.True(t, consume(q, func(_ context.Context, el int64) error { + assert.EqualValues(t, 1, el) + return nil + })) + assert.EqualValues(t, 3, q.Size()) + require.NoError(t, q.Shutdown(context.Background())) + assert.EqualValues(t, 3, q.Size()) + assert.True(t, consume(q, func(_ context.Context, el int64) error { + assert.EqualValues(t, 3, el) + return nil + })) + assert.EqualValues(t, 0, q.Size()) + assert.False(t, consume(q, func(context.Context, int64) error { t.FailNow(); return nil })) +} + +func TestMemoryQueueOfferInvalidSize(t *testing.T) { + q := newMemoryQueue[int64](memoryQueueSettings[int64]{sizer: sizerInt64{}, capacity: 1}) + require.ErrorIs(t, q.Offer(context.Background(), -1), errInvalidSize) +} + +func TestMemoryQueueOfferZeroSize(t *testing.T) { + q := newMemoryQueue[int64](memoryQueueSettings[int64]{sizer: sizerInt64{}, capacity: 1}) + require.NoError(t, q.Offer(context.Background(), 0)) + require.NoError(t, q.Shutdown(context.Background())) + // Because the size 0 is ignored, nothing to drain. + assert.False(t, consume(q, func(context.Context, int64) error { t.FailNow(); return nil })) +} + +func TestMemoryQueueZeroCapacity(t *testing.T) { + q := newMemoryQueue[int64](memoryQueueSettings[int64]{sizer: sizerInt64{}, capacity: 0}) + require.ErrorIs(t, q.Offer(context.Background(), 1), ErrQueueIsFull) + require.NoError(t, q.Shutdown(context.Background())) +} + +func consume[T any](q readableQueue[T], consumeFunc func(context.Context, T) error) bool { + ctx, req, done, ok := q.Read(context.Background()) + if !ok { + return false + } + done.OnDone(consumeFunc(ctx, req)) + return true +} diff --git a/exporter/exporterqueue/persistent_queue_test.go b/exporter/exporterqueue/persistent_queue_test.go index 42c2e869cc0..313852057b8 100644 --- a/exporter/exporterqueue/persistent_queue_test.go +++ b/exporter/exporterqueue/persistent_queue_test.go @@ -229,7 +229,7 @@ func createAndStartTestPersistentQueue(t *testing.T, sizer sizer[uint64], capaci unmarshaler: uint64Unmarshaler, set: exportertest.NewNopSettings(), }) - ac := newConsumerQueue(pq, numConsumers, func(ctx context.Context, item uint64, done Done) { + ac := newAsyncQueue(pq, numConsumers, func(ctx context.Context, item uint64, done Done) { done.OnDone(consumeFunc(ctx, item)) }) host := &mockHost{ext: map[component.ID]component.Component{ @@ -425,7 +425,7 @@ func TestPersistentBlockingQueue(t *testing.T) { set: exportertest.NewNopSettings(), }) consumed := &atomic.Int64{} - ac := newConsumerQueue(pq, 10, func(_ context.Context, _ uint64, done Done) { + ac := newAsyncQueue(pq, 10, func(_ context.Context, _ uint64, done Done) { consumed.Add(1) done.OnDone(nil) }) diff --git a/exporter/exporterqueue/queue.go b/exporter/exporterqueue/queue.go index 0044b53ec7e..aa73c5708bc 100644 --- a/exporter/exporterqueue/queue.go +++ b/exporter/exporterqueue/queue.go @@ -81,12 +81,15 @@ type Factory[T any] func(context.Context, Settings, Config, ConsumeFunc[T]) Queu // until https://github.com/open-telemetry/opentelemetry-collector/issues/8122 is resolved. func NewMemoryQueueFactory[T any]() Factory[T] { return func(_ context.Context, _ Settings, cfg Config, consume ConsumeFunc[T]) Queue[T] { - q := newBoundedMemoryQueue[T](memoryQueueSettings[T]{ + if !cfg.Enabled { + return newDisabledQueue(consume) + } + q := newMemoryQueue[T](memoryQueueSettings[T]{ sizer: &requestSizer[T]{}, capacity: int64(cfg.QueueSize), blocking: cfg.Blocking, }) - return newConsumerQueue(q, cfg.NumConsumers, consume) + return newAsyncQueue(q, cfg.NumConsumers, consume) } } @@ -109,6 +112,9 @@ func NewPersistentQueueFactory[T any](storageID *component.ID, factorySettings P return NewMemoryQueueFactory[T]() } return func(_ context.Context, set Settings, cfg Config, consume ConsumeFunc[T]) Queue[T] { + if !cfg.Enabled { + return newDisabledQueue(consume) + } q := newPersistentQueue[T](persistentQueueSettings[T]{ sizer: &requestSizer[T]{}, capacity: int64(cfg.QueueSize), @@ -119,6 +125,6 @@ func NewPersistentQueueFactory[T any](storageID *component.ID, factorySettings P unmarshaler: factorySettings.Unmarshaler, set: set.ExporterSettings, }) - return newConsumerQueue(q, cfg.NumConsumers, consume) + return newAsyncQueue(q, cfg.NumConsumers, consume) } } diff --git a/exporter/exporterqueue/sized_queue_test.go b/exporter/exporterqueue/sized_queue_test.go deleted file mode 100644 index aef119802e5..00000000000 --- a/exporter/exporterqueue/sized_queue_test.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package exporterqueue - -import ( - "context" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -type sizerInt struct{} - -func (s sizerInt) Sizeof(el int) int64 { - return int64(el) -} - -func TestSizedQueue(t *testing.T) { - q := newSizedQueue[int](7, sizerInt{}, false) - require.NoError(t, q.Offer(context.Background(), 1)) - assert.Equal(t, int64(1), q.Size()) - assert.Equal(t, int64(7), q.Capacity()) - - require.NoError(t, q.Offer(context.Background(), 3)) - assert.Equal(t, int64(4), q.Size()) - - // should not be able to send to the full queue - require.Error(t, q.Offer(context.Background(), 4)) - assert.Equal(t, int64(4), q.Size()) - - _, el, ok := q.pop() - assert.Equal(t, 1, el) - assert.True(t, ok) - assert.Equal(t, int64(3), q.Size()) - - _, el, ok = q.pop() - assert.Equal(t, 3, el) - assert.True(t, ok) - assert.Equal(t, int64(0), q.Size()) - - require.NoError(t, q.Shutdown(context.Background())) - _, el, ok = q.pop() - assert.False(t, ok) - assert.Equal(t, 0, el) -} - -func TestSizedQueue_DrainAllElements(t *testing.T) { - q := newSizedQueue[int](7, sizerInt{}, false) - require.NoError(t, q.Offer(context.Background(), 1)) - require.NoError(t, q.Offer(context.Background(), 3)) - - _, el, ok := q.pop() - assert.Equal(t, 1, el) - assert.True(t, ok) - assert.Equal(t, int64(3), q.Size()) - - require.NoError(t, q.Shutdown(context.Background())) - _, el, ok = q.pop() - assert.Equal(t, 3, el) - assert.True(t, ok) - assert.Equal(t, int64(0), q.Size()) - - _, el, ok = q.pop() - assert.False(t, ok) - assert.Equal(t, 0, el) -} - -func TestSizedChannel_OfferInvalidSize(t *testing.T) { - q := newSizedQueue[int](1, sizerInt{}, false) - require.ErrorIs(t, q.Offer(context.Background(), -1), errInvalidSize) -} - -func TestSizedChannel_OfferZeroSize(t *testing.T) { - q := newSizedQueue[int](1, sizerInt{}, false) - require.NoError(t, q.Offer(context.Background(), 0)) - require.NoError(t, q.Shutdown(context.Background())) - // Because the size 0 is ignored, nothing to drain. - _, el, ok := q.pop() - assert.False(t, ok) - assert.Equal(t, 0, el) -} diff --git a/exporter/exportertest/go.mod b/exporter/exportertest/go.mod index f8079c3904e..0c35b849343 100644 --- a/exporter/exportertest/go.mod +++ b/exporter/exportertest/go.mod @@ -33,7 +33,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect go.opentelemetry.io/collector/extension v0.119.0 // indirect go.opentelemetry.io/collector/extension/xextension v0.119.0 // indirect @@ -50,7 +49,7 @@ require ( golang.org/x/sys v0.29.0 // indirect golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -68,8 +67,6 @@ replace go.opentelemetry.io/collector/receiver/receivertest => ../../receiver/re replace go.opentelemetry.io/collector/extension => ../../extension -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/config/configretry => ../../config/configretry replace go.opentelemetry.io/collector/pipeline => ../../pipeline diff --git a/exporter/exportertest/go.sum b/exporter/exportertest/go.sum index a3cacda0f2f..93e6b13dd38 100644 --- a/exporter/exportertest/go.sum +++ b/exporter/exportertest/go.sum @@ -95,8 +95,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/exporter/go.mod b/exporter/go.mod index e3215594a8e..5a262787ae0 100644 --- a/exporter/go.mod +++ b/exporter/go.mod @@ -40,7 +40,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect go.opentelemetry.io/collector/exporter/xexporter v0.119.0 // indirect go.opentelemetry.io/collector/extension v0.119.0 // indirect @@ -53,7 +52,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -79,8 +78,6 @@ retract v0.76.0 // Depends on retracted pdata v1.0.0-rc10 module replace go.opentelemetry.io/collector/config/configretry => ../config/configretry -replace go.opentelemetry.io/collector/config/configtelemetry => ../config/configtelemetry - replace go.opentelemetry.io/collector/consumer/xconsumer => ../consumer/xconsumer replace go.opentelemetry.io/collector/consumer/consumertest => ../consumer/consumertest diff --git a/exporter/go.sum b/exporter/go.sum index a3cacda0f2f..93e6b13dd38 100644 --- a/exporter/go.sum +++ b/exporter/go.sum @@ -95,8 +95,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/exporter/internal/queue/default_batcher.go b/exporter/internal/queue/default_batcher.go index 69b0fc6591d..b72f75cfbdc 100644 --- a/exporter/internal/queue/default_batcher.go +++ b/exporter/internal/queue/default_batcher.go @@ -38,9 +38,13 @@ func newDefaultBatcher(batchCfg exporterbatcher.Config, exportFunc func(ctx context.Context, req internal.Request) error, maxWorkers int, ) *defaultBatcher { - workerPool := make(chan struct{}, maxWorkers) - for i := 0; i < maxWorkers; i++ { - workerPool <- struct{}{} + // TODO: Determine what is the right behavior for this in combination with async queue. + var workerPool chan struct{} + if maxWorkers != 0 { + workerPool = make(chan struct{}, maxWorkers) + for i := 0; i < maxWorkers; i++ { + workerPool <- struct{}{} + } } return &defaultBatcher{ batchCfg: batchCfg, @@ -199,11 +203,15 @@ func (qb *defaultBatcher) flushCurrentBatchIfNecessary() { // flush starts a goroutine that calls exportFunc. It blocks until a worker is available if necessary. func (qb *defaultBatcher) flush(ctx context.Context, req internal.Request, done exporterqueue.Done) { qb.stopWG.Add(1) - <-qb.workerPool + if qb.workerPool != nil { + <-qb.workerPool + } go func() { defer qb.stopWG.Done() done.OnDone(qb.exportFunc(ctx, req)) - qb.workerPool <- struct{}{} + if qb.workerPool != nil { + qb.workerPool <- struct{}{} + } }() } diff --git a/exporter/nopexporter/README.md b/exporter/nopexporter/README.md index fa4ea5c5d87..c2159a297cd 100644 --- a/exporter/nopexporter/README.md +++ b/exporter/nopexporter/README.md @@ -6,6 +6,7 @@ | Stability | [beta]: traces, metrics, logs | | Distributions | [core], [contrib], [k8s] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fnop%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fnop) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fnop%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fnop) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@evan-bradley](https://www.github.com/evan-bradley) | [beta]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/component-stability.md#beta [core]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol diff --git a/exporter/nopexporter/go.mod b/exporter/nopexporter/go.mod index d0985746d6b..38e8521e197 100644 --- a/exporter/nopexporter/go.mod +++ b/exporter/nopexporter/go.mod @@ -31,7 +31,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer v1.25.0 // indirect go.opentelemetry.io/collector/consumer/consumererror v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect @@ -53,7 +52,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -75,8 +74,6 @@ replace go.opentelemetry.io/collector/receiver => ../../receiver replace go.opentelemetry.io/collector/confmap => ../../confmap -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/extension => ../../extension replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile diff --git a/exporter/nopexporter/go.sum b/exporter/nopexporter/go.sum index 47db8db1b39..962fe209bf8 100644 --- a/exporter/nopexporter/go.sum +++ b/exporter/nopexporter/go.sum @@ -107,8 +107,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/exporter/nopexporter/metadata.yaml b/exporter/nopexporter/metadata.yaml index 352312a44c4..3a6d9e6f3a1 100644 --- a/exporter/nopexporter/metadata.yaml +++ b/exporter/nopexporter/metadata.yaml @@ -2,6 +2,9 @@ type: nop github_project: open-telemetry/opentelemetry-collector status: + codeowners: + active: + - evan-bradley class: exporter stability: beta: [traces, metrics, logs] diff --git a/exporter/otlpexporter/config_test.go b/exporter/otlpexporter/config_test.go index ae351535df8..099d67958a4 100644 --- a/exporter/otlpexporter/config_test.go +++ b/exporter/otlpexporter/config_test.go @@ -19,6 +19,7 @@ import ( "go.opentelemetry.io/collector/config/configtls" "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/confmap/confmaptest" + "go.opentelemetry.io/collector/confmap/xconfmap" "go.opentelemetry.io/collector/exporter/exporterbatcher" "go.opentelemetry.io/collector/exporter/exporterhelper" ) @@ -136,7 +137,7 @@ func TestUnmarshalInvalidConfig(t *testing.T) { sub, err := cm.Sub(tt.name) require.NoError(t, err) assert.NoError(t, sub.Unmarshal(&cfg)) - assert.ErrorContains(t, component.ValidateConfig(cfg), tt.errorMsg) + assert.ErrorContains(t, xconfmap.Validate(cfg), tt.errorMsg) }) } } diff --git a/exporter/otlpexporter/go.mod b/exporter/otlpexporter/go.mod index fbf27246087..418af355c9c 100644 --- a/exporter/otlpexporter/go.mod +++ b/exporter/otlpexporter/go.mod @@ -14,6 +14,7 @@ require ( go.opentelemetry.io/collector/config/configretry v1.25.0 go.opentelemetry.io/collector/config/configtls v1.25.0 go.opentelemetry.io/collector/confmap v1.25.0 + go.opentelemetry.io/collector/confmap/xconfmap v0.0.0-20250205001856-68ff067415c1 go.opentelemetry.io/collector/consumer v1.25.0 go.opentelemetry.io/collector/consumer/consumererror v0.119.0 go.opentelemetry.io/collector/exporter v0.119.0 @@ -27,7 +28,7 @@ require ( go.uber.org/zap v1.27.0 google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f google.golang.org/grpc v1.70.0 - google.golang.org/protobuf v1.36.4 + google.golang.org/protobuf v1.36.5 ) require ( @@ -55,7 +56,6 @@ require ( go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/client v1.25.0 // indirect go.opentelemetry.io/collector/config/confignet v1.25.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/consumererror/xconsumererror v0.119.0 // indirect go.opentelemetry.io/collector/consumer/consumertest v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect @@ -99,6 +99,8 @@ replace go.opentelemetry.io/collector/config/configtls => ../../config/configtls replace go.opentelemetry.io/collector/confmap => ../../confmap +replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap + replace go.opentelemetry.io/collector/exporter => ../ replace go.opentelemetry.io/collector/extension => ../../extension @@ -117,8 +119,6 @@ replace go.opentelemetry.io/collector/consumer => ../../consumer replace go.opentelemetry.io/collector/client => ../../client -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/config/configretry => ../../config/configretry replace go.opentelemetry.io/collector/consumer/xconsumer => ../../consumer/xconsumer diff --git a/exporter/otlpexporter/go.sum b/exporter/otlpexporter/go.sum index c11f1c8454f..b452bef6d61 100644 --- a/exporter/otlpexporter/go.sum +++ b/exporter/otlpexporter/go.sum @@ -117,8 +117,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/exporter/otlphttpexporter/config_test.go b/exporter/otlphttpexporter/config_test.go index e10f198960d..9d0c78a7d28 100644 --- a/exporter/otlphttpexporter/config_test.go +++ b/exporter/otlphttpexporter/config_test.go @@ -12,13 +12,13 @@ import ( "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/config/configretry" "go.opentelemetry.io/collector/config/configtls" "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/confmap/confmaptest" + "go.opentelemetry.io/collector/confmap/xconfmap" "go.opentelemetry.io/collector/exporter/exporterhelper" ) @@ -28,7 +28,7 @@ func TestUnmarshalDefaultConfig(t *testing.T) { require.NoError(t, confmap.New().Unmarshal(&cfg)) assert.Equal(t, factory.CreateDefaultConfig(), cfg) // Default/Empty config is invalid. - assert.Error(t, component.ValidateConfig(cfg)) + assert.Error(t, xconfmap.Validate(cfg)) } func TestUnmarshalConfig(t *testing.T) { diff --git a/exporter/otlphttpexporter/go.mod b/exporter/otlphttpexporter/go.mod index 79b87864d46..166d322fdd0 100644 --- a/exporter/otlphttpexporter/go.mod +++ b/exporter/otlphttpexporter/go.mod @@ -13,6 +13,7 @@ require ( go.opentelemetry.io/collector/config/configretry v1.25.0 go.opentelemetry.io/collector/config/configtls v1.25.0 go.opentelemetry.io/collector/confmap v1.25.0 + go.opentelemetry.io/collector/confmap/xconfmap v0.0.0-20250205001856-68ff067415c1 go.opentelemetry.io/collector/consumer v1.25.0 go.opentelemetry.io/collector/consumer/consumererror v0.119.0 go.opentelemetry.io/collector/exporter v0.119.0 @@ -25,7 +26,7 @@ require ( go.uber.org/zap v1.27.0 google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a google.golang.org/grpc v1.70.0 - google.golang.org/protobuf v1.36.4 + google.golang.org/protobuf v1.36.5 ) require ( @@ -55,7 +56,6 @@ require ( go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/client v1.25.0 // indirect go.opentelemetry.io/collector/config/configauth v0.119.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/consumererror/xconsumererror v0.119.0 // indirect go.opentelemetry.io/collector/consumer/consumertest v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect @@ -95,12 +95,12 @@ replace go.opentelemetry.io/collector/config/confighttp => ../../config/confight replace go.opentelemetry.io/collector/config/configopaque => ../../config/configopaque -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/config/configtls => ../../config/configtls replace go.opentelemetry.io/collector/confmap => ../../confmap +replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap + replace go.opentelemetry.io/collector/exporter => ../ replace go.opentelemetry.io/collector/extension => ../../extension diff --git a/exporter/otlphttpexporter/go.sum b/exporter/otlphttpexporter/go.sum index 8297a8a23c1..5b9a0e901b4 100644 --- a/exporter/otlphttpexporter/go.sum +++ b/exporter/otlphttpexporter/go.sum @@ -121,8 +121,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/exporter/xexporter/go.mod b/exporter/xexporter/go.mod index e204b55dce4..254f75b6fd1 100644 --- a/exporter/xexporter/go.mod +++ b/exporter/xexporter/go.mod @@ -18,7 +18,6 @@ require ( 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.119.0 // indirect go.opentelemetry.io/collector/consumer v1.25.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.119.0 // indirect @@ -32,7 +31,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -42,8 +41,6 @@ replace go.opentelemetry.io/collector/extension => ../../extension replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/config/configretry => ../../config/configretry replace go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata diff --git a/exporter/xexporter/go.sum b/exporter/xexporter/go.sum index 19674bfc86e..d0f00ae46b4 100644 --- a/exporter/xexporter/go.sum +++ b/exporter/xexporter/go.sum @@ -90,8 +90,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/exporter/xexporter/metadata.yaml b/exporter/xexporter/metadata.yaml new file mode 100644 index 00000000000..9ee56341be1 --- /dev/null +++ b/exporter/xexporter/metadata.yaml @@ -0,0 +1,10 @@ +type: xexporter + +status: + class: exporter + codeowners: + active: + - mx-psi + - dmathieu + stability: + development: [profiles] diff --git a/extension/auth/authtest/go.mod b/extension/auth/authtest/go.mod index 3826347391a..351c995c4db 100644 --- a/extension/auth/authtest/go.mod +++ b/extension/auth/authtest/go.mod @@ -14,7 +14,6 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/extension v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect @@ -26,7 +25,7 @@ require ( golang.org/x/sys v0.29.0 // indirect golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -38,6 +37,4 @@ replace go.opentelemetry.io/collector/pdata => ../../../pdata replace go.opentelemetry.io/collector/extension => ../.. -replace go.opentelemetry.io/collector/config/configtelemetry => ../../../config/configtelemetry - replace go.opentelemetry.io/collector/component/componenttest => ../../../component/componenttest diff --git a/extension/auth/authtest/go.sum b/extension/auth/authtest/go.sum index ac84fbc4cf9..55710e1d6d5 100644 --- a/extension/auth/authtest/go.sum +++ b/extension/auth/authtest/go.sum @@ -79,8 +79,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/extension/auth/go.mod b/extension/auth/go.mod index 11df8a5e939..720497ca1f7 100644 --- a/extension/auth/go.mod +++ b/extension/auth/go.mod @@ -19,7 +19,6 @@ require ( github.com/google/uuid v1.6.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -32,7 +31,7 @@ require ( golang.org/x/sys v0.29.0 // indirect golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -43,5 +42,3 @@ replace go.opentelemetry.io/collector/component/componenttest => ../../component replace go.opentelemetry.io/collector/extension => ../ replace go.opentelemetry.io/collector/pdata => ../../pdata - -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry diff --git a/extension/auth/go.sum b/extension/auth/go.sum index 88913771563..97b9d860e8e 100644 --- a/extension/auth/go.sum +++ b/extension/auth/go.sum @@ -80,8 +80,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/extension/extension.go b/extension/extension.go index 41c5a76000f..2d4e507f030 100644 --- a/extension/extension.go +++ b/extension/extension.go @@ -17,15 +17,6 @@ type Extension interface { component.Component } -// ModuleInfo describes the go module for each component. -type ModuleInfo struct { - Receiver map[component.Type]string - Processor map[component.Type]string - Exporter map[component.Type]string - Extension map[component.Type]string - Connector map[component.Type]string -} - // Settings is passed to Factory.Create(...) function. type Settings struct { // ID returns the ID of the component that will be created. @@ -35,9 +26,6 @@ type Settings struct { // BuildInfo can be used by components for informational purposes BuildInfo component.BuildInfo - - // ModuleInfo describes the go module for each component. - ModuleInfo ModuleInfo } // CreateFunc is the equivalent of Factory.Create(...) function. diff --git a/extension/extensioncapabilities/go.mod b/extension/extensioncapabilities/go.mod index f3d05ca042d..0b779433f95 100644 --- a/extension/extensioncapabilities/go.mod +++ b/extension/extensioncapabilities/go.mod @@ -16,7 +16,6 @@ require ( github.com/knadh/koanf/v2 v2.1.2 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -28,7 +27,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -38,6 +37,4 @@ replace go.opentelemetry.io/collector/pdata => ../../pdata replace go.opentelemetry.io/collector/confmap => ../../confmap -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/component => ../../component diff --git a/extension/extensioncapabilities/go.sum b/extension/extensioncapabilities/go.sum index fd1e0ed46d6..6e6c42be374 100644 --- a/extension/extensioncapabilities/go.sum +++ b/extension/extensioncapabilities/go.sum @@ -91,8 +91,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/extension/extensiontest/go.mod b/extension/extensiontest/go.mod index d03b9de38dc..8c2f722fc12 100644 --- a/extension/extensiontest/go.mod +++ b/extension/extensiontest/go.mod @@ -19,7 +19,6 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -33,14 +32,12 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) replace go.opentelemetry.io/collector/pdata => ../../pdata -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/component => ../../component replace go.opentelemetry.io/collector/component/componenttest => ../../component/componenttest diff --git a/extension/extensiontest/go.sum b/extension/extensiontest/go.sum index 88913771563..97b9d860e8e 100644 --- a/extension/extensiontest/go.sum +++ b/extension/extensiontest/go.sum @@ -80,8 +80,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/extension/go.mod b/extension/go.mod index 220ace87bde..e78d8582e87 100644 --- a/extension/go.mod +++ b/extension/go.mod @@ -12,7 +12,6 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -24,12 +23,10 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) replace go.opentelemetry.io/collector/component => ../component replace go.opentelemetry.io/collector/pdata => ../pdata - -replace go.opentelemetry.io/collector/config/configtelemetry => ../config/configtelemetry diff --git a/extension/go.sum b/extension/go.sum index 68c5d74f916..535da3c7b2d 100644 --- a/extension/go.sum +++ b/extension/go.sum @@ -79,8 +79,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/extension/memorylimiterextension/go.mod b/extension/memorylimiterextension/go.mod index 49ce8687a7e..88a418367bd 100644 --- a/extension/memorylimiterextension/go.mod +++ b/extension/memorylimiterextension/go.mod @@ -36,7 +36,6 @@ require ( github.com/tklauser/numcpus v0.6.1 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -49,7 +48,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -63,8 +62,6 @@ replace go.opentelemetry.io/collector/extension => ../../extension replace go.opentelemetry.io/collector/pdata => ../../pdata -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/internal/memorylimiter => ../../internal/memorylimiter replace go.opentelemetry.io/collector/extension/extensiontest => ../../extension/extensiontest diff --git a/extension/memorylimiterextension/go.sum b/extension/memorylimiterextension/go.sum index f7c3e846112..89fa913d7c1 100644 --- a/extension/memorylimiterextension/go.sum +++ b/extension/memorylimiterextension/go.sum @@ -113,8 +113,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/extension/xextension/go.mod b/extension/xextension/go.mod index 4c5489a2515..3a2f8b374a8 100644 --- a/extension/xextension/go.mod +++ b/extension/xextension/go.mod @@ -9,7 +9,6 @@ require ( require ( github.com/gogo/protobuf v1.3.2 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -21,7 +20,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect ) replace go.opentelemetry.io/collector/extension => ../ @@ -29,5 +28,3 @@ replace go.opentelemetry.io/collector/extension => ../ replace go.opentelemetry.io/collector/component => ../../component replace go.opentelemetry.io/collector/pdata => ../../pdata - -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry diff --git a/extension/xextension/go.sum b/extension/xextension/go.sum index 0921e31e939..506058c9082 100644 --- a/extension/xextension/go.sum +++ b/extension/xextension/go.sum @@ -73,7 +73,7 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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/extension/xextension/metadata.yaml b/extension/xextension/metadata.yaml new file mode 100644 index 00000000000..7a86a03e601 --- /dev/null +++ b/extension/xextension/metadata.yaml @@ -0,0 +1,9 @@ +type: xextension + +status: + class: extension + codeowners: + active: + - swiatekm + stability: + development: [profiles] diff --git a/extension/zpagesextension/go.mod b/extension/zpagesextension/go.mod index 52e382ffa2a..b1f6c5c8ccd 100644 --- a/extension/zpagesextension/go.mod +++ b/extension/zpagesextension/go.mod @@ -43,7 +43,6 @@ require ( go.opentelemetry.io/collector/client v1.25.0 // indirect go.opentelemetry.io/collector/config/configcompression v1.25.0 // indirect go.opentelemetry.io/collector/config/configopaque v1.25.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/config/configtls v1.25.0 // indirect go.opentelemetry.io/collector/extension/auth v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect @@ -58,7 +57,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -78,8 +77,6 @@ replace go.opentelemetry.io/collector/pdata => ../../pdata replace go.opentelemetry.io/collector/consumer => ../../consumer -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/config/configopaque => ../../config/configopaque replace go.opentelemetry.io/collector/config/configtls => ../../config/configtls diff --git a/extension/zpagesextension/go.sum b/extension/zpagesextension/go.sum index b8b14b7439a..6cd33b020f3 100644 --- a/extension/zpagesextension/go.sum +++ b/extension/zpagesextension/go.sum @@ -114,8 +114,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/internal/e2e/confignet_test.go b/internal/e2e/confignet_test.go new file mode 100644 index 00000000000..82fcaa43384 --- /dev/null +++ b/internal/e2e/confignet_test.go @@ -0,0 +1,28 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package e2e + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "go.opentelemetry.io/collector/config/confignet" + "go.opentelemetry.io/collector/confmap" +) + +func TestConfmapMarshalConfigNet(t *testing.T) { + conf := confmap.New() + require.NoError(t, conf.Marshal(confignet.NewDefaultDialerConfig())) + assert.Equal(t, map[string]any{}, conf.ToStringMap()) + + conf = confmap.New() + require.NoError(t, conf.Marshal(confignet.NewDefaultAddrConfig())) + assert.Equal(t, map[string]any{}, conf.ToStringMap()) + + conf = confmap.New() + require.NoError(t, conf.Marshal(confignet.NewDefaultTCPAddrConfig())) + assert.Equal(t, map[string]any{}, conf.ToStringMap()) +} diff --git a/internal/e2e/go.mod b/internal/e2e/go.mod index 07447d0a7fc..12bc25d0aa3 100644 --- a/internal/e2e/go.mod +++ b/internal/e2e/go.mod @@ -10,6 +10,7 @@ require ( go.opentelemetry.io/collector/component/componenttest v0.119.0 go.opentelemetry.io/collector/config/configgrpc v0.119.0 go.opentelemetry.io/collector/config/confighttp v0.119.0 + go.opentelemetry.io/collector/config/confignet v1.25.0 go.opentelemetry.io/collector/config/configopaque v1.25.0 go.opentelemetry.io/collector/config/configretry v1.25.0 go.opentelemetry.io/collector/config/configtelemetry v0.119.0 @@ -79,9 +80,9 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/client v1.25.0 // indirect + go.opentelemetry.io/collector/component/componentattribute v0.119.0 // indirect go.opentelemetry.io/collector/config/configauth v0.119.0 // indirect go.opentelemetry.io/collector/config/configcompression v1.25.0 // indirect - go.opentelemetry.io/collector/config/confignet v1.25.0 // indirect go.opentelemetry.io/collector/connector/xconnector v0.119.0 // indirect go.opentelemetry.io/collector/consumer/consumererror v0.119.0 // indirect go.opentelemetry.io/collector/consumer/consumererror/xconsumererror v0.119.0 // indirect @@ -133,7 +134,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -177,6 +178,8 @@ replace go.opentelemetry.io/collector/extension => ../../extension replace go.opentelemetry.io/collector/confmap => ../../confmap +replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap + replace go.opentelemetry.io/collector/component => ../../component replace go.opentelemetry.io/collector/component/componenttest => ../../component/componenttest @@ -242,3 +245,5 @@ replace go.opentelemetry.io/collector/extension/extensiontest => ../../extension replace go.opentelemetry.io/collector/extension/auth/authtest => ../../extension/auth/authtest replace go.opentelemetry.io/collector/extension/xextension => ../../extension/xextension + +replace go.opentelemetry.io/collector/component/componentattribute => ../../component/componentattribute diff --git a/internal/e2e/go.sum b/internal/e2e/go.sum index 310f7d3ed17..d6ca4ccbfd0 100644 --- a/internal/e2e/go.sum +++ b/internal/e2e/go.sum @@ -206,8 +206,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/internal/fanoutconsumer/go.mod b/internal/fanoutconsumer/go.mod index 779f860e986..b17eb8506cb 100644 --- a/internal/fanoutconsumer/go.mod +++ b/internal/fanoutconsumer/go.mod @@ -26,7 +26,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/internal/fanoutconsumer/go.sum b/internal/fanoutconsumer/go.sum index edc81fe738b..2b6210da93c 100644 --- a/internal/fanoutconsumer/go.sum +++ b/internal/fanoutconsumer/go.sum @@ -86,8 +86,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/internal/memorylimiter/go.mod b/internal/memorylimiter/go.mod index 07c3595199c..9ee8954c1f5 100644 --- a/internal/memorylimiter/go.mod +++ b/internal/memorylimiter/go.mod @@ -28,7 +28,6 @@ require ( 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/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -39,12 +38,10 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/confmap => ../../confmap replace go.opentelemetry.io/collector/component => ../../component diff --git a/internal/memorylimiter/go.sum b/internal/memorylimiter/go.sum index db5380dd5e8..157d8f74147 100644 --- a/internal/memorylimiter/go.sum +++ b/internal/memorylimiter/go.sum @@ -112,8 +112,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/internal/sharedcomponent/go.mod b/internal/sharedcomponent/go.mod index 5404be00452..a44b6ce6364 100644 --- a/internal/sharedcomponent/go.mod +++ b/internal/sharedcomponent/go.mod @@ -18,7 +18,6 @@ require ( github.com/google/uuid v1.6.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/collector/pipeline v0.119.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect @@ -33,7 +32,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -46,5 +45,3 @@ replace go.opentelemetry.io/collector/component/componenttest => ../../component replace go.opentelemetry.io/collector/pipeline => ../../pipeline replace go.opentelemetry.io/collector/pdata => ../../pdata - -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry diff --git a/internal/sharedcomponent/go.sum b/internal/sharedcomponent/go.sum index 88913771563..97b9d860e8e 100644 --- a/internal/sharedcomponent/go.sum +++ b/internal/sharedcomponent/go.sum @@ -80,8 +80,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/internal/tools/go.mod b/internal/tools/go.mod index b8de3726988..7a55b4c1036 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -11,11 +11,12 @@ require ( github.com/google/addlicense v1.1.1 github.com/jcchavezs/porto v0.7.0 github.com/pavius/impi v0.0.3 - go.opentelemetry.io/build-tools/checkfile v0.17.0 - go.opentelemetry.io/build-tools/chloggen v0.17.0 - go.opentelemetry.io/build-tools/crosslink v0.17.0 - go.opentelemetry.io/build-tools/multimod v0.17.0 - go.opentelemetry.io/build-tools/semconvgen v0.17.0 + go.opentelemetry.io/build-tools/checkfile v0.18.0 + go.opentelemetry.io/build-tools/chloggen v0.18.0 + go.opentelemetry.io/build-tools/crosslink v0.18.0 + go.opentelemetry.io/build-tools/githubgen v0.18.0 + go.opentelemetry.io/build-tools/multimod v0.18.0 + go.opentelemetry.io/build-tools/semconvgen v0.18.0 golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 golang.org/x/tools v0.29.0 golang.org/x/vuln v1.1.4 @@ -39,7 +40,7 @@ require ( github.com/Masterminds/semver/v3 v3.3.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/OpenPeeDeeP/depguard/v2 v2.2.0 // indirect - github.com/ProtonMail/go-crypto v1.1.3 // indirect + github.com/ProtonMail/go-crypto v1.1.5 // indirect github.com/alecthomas/go-check-sumtype v0.3.1 // indirect github.com/alexkohler/nakedret/v2 v2.0.5 // indirect github.com/alexkohler/prealloc v1.0.0 // indirect @@ -80,8 +81,8 @@ require ( github.com/ghostiam/protogetter v0.3.8 // indirect github.com/go-critic/go-critic v0.11.5 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.6.1 // indirect - github.com/go-git/go-git/v5 v5.13.1 // indirect + github.com/go-git/go-billy/v5 v5.6.2 // indirect + github.com/go-git/go-git/v5 v5.13.2 // indirect github.com/go-toolsmith/astcast v1.1.0 // indirect github.com/go-toolsmith/astcopy v1.1.0 // indirect github.com/go-toolsmith/astequal v1.2.0 // indirect @@ -102,6 +103,8 @@ require ( github.com/golangci/revgrep v0.5.3 // indirect github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed // indirect github.com/google/go-cmp v0.6.0 // indirect + github.com/google/go-github/v66 v66.0.0 // indirect + github.com/google/go-querystring v1.1.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/gordonklaus/ineffassign v0.1.0 // indirect github.com/gostaticanalysis/analysisutil v0.7.1 // indirect @@ -152,7 +155,7 @@ require ( github.com/nunnatsa/ginkgolinter v0.18.4 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/pelletier/go-toml/v2 v2.2.3 // indirect - github.com/pjbgf/sha1cd v0.3.0 // indirect + github.com/pjbgf/sha1cd v0.3.2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/polyfloyd/go-errorlint v1.7.0 // indirect github.com/prometheus/client_golang v1.19.0 // indirect @@ -188,7 +191,7 @@ require ( github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect github.com/spf13/cobra v1.8.1 // indirect - github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/pflag v1.0.6 // indirect github.com/spf13/viper v1.19.0 // indirect github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect github.com/stbenjam/no-sprintf-host-port v0.2.0 // indirect @@ -213,7 +216,7 @@ require ( gitlab.com/bosi/decorder v0.4.2 // indirect go-simpler.org/musttag v0.13.0 // indirect go-simpler.org/sloglint v0.7.2 // indirect - go.opentelemetry.io/build-tools v0.17.0 // indirect + go.opentelemetry.io/build-tools v0.18.0 // indirect go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect diff --git a/internal/tools/go.sum b/internal/tools/go.sum index de48b5887cb..a1918b81d6d 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -29,8 +29,8 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OpenPeeDeeP/depguard/v2 v2.2.0 h1:vDfG60vDtIuf0MEOhmLlLLSzqaRM8EMcgJPdp74zmpA= github.com/OpenPeeDeeP/depguard/v2 v2.2.0/go.mod h1:CIzddKRvLBC4Au5aYP/i3nyaWQ+ClszLIuVocRiCYFQ= -github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk= -github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= +github.com/ProtonMail/go-crypto v1.1.5 h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4= +github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/a8m/envsubst v1.4.2 h1:4yWIHXOLEJHQEFd4UjrWDrYeYlV7ncFWJOCBRLOZHQg= github.com/a8m/envsubst v1.4.2/go.mod h1:MVUTQNGQ3tsjOOtKCNd+fl8RzhsXcDvvAEzkhGtlsbY= github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= @@ -108,8 +108,8 @@ github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxK github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dnephin/pflag v1.0.7 h1:oxONGlWxhmUct0YzKTgrpQv9AUA1wtPBn7zuSjJqptk= github.com/dnephin/pflag v1.0.7/go.mod h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE= -github.com/elazarl/goproxy v1.2.3 h1:xwIyKHbaP5yfT6O9KIeYJR5549MXRQkoQMRXGztz8YQ= -github.com/elazarl/goproxy v1.2.3/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64= +github.com/elazarl/goproxy v1.4.0 h1:4GyuSbFa+s26+3rmYNSuUVsx+HgPrV1bk1jXI0l9wjM= +github.com/elazarl/goproxy v1.4.0/go.mod h1:X/5W/t+gzDyLfHW4DrMdpjqYjpXsURlBt9lpBDxZZZQ= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q= @@ -136,12 +136,12 @@ github.com/go-critic/go-critic v0.11.5 h1:TkDTOn5v7EEngMxu8KbuFqFR43USaaH8XRJLz1 github.com/go-critic/go-critic v0.11.5/go.mod h1:wu6U7ny9PiaHaZHcvMDmdysMqvDem162Rh3zWTrqk8M= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.6.1 h1:u+dcrgaguSSkbjzHwelEjc0Yj300NUevrrPphk/SoRA= -github.com/go-git/go-billy/v5 v5.6.1/go.mod h1:0AsLr1z2+Uksi4NlElmMblP5rPcDZNRCD8ujZCRR2BE= +github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= +github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.13.1 h1:DAQ9APonnlvSWpvolXWIuV6Q6zXy2wHbN4cVlNR5Q+M= -github.com/go-git/go-git/v5 v5.13.1/go.mod h1:qryJB4cSBoq3FRoBRf5A77joojuBcmPJ0qu3XXXVixc= +github.com/go-git/go-git/v5 v5.13.2 h1:7O7xvsK7K+rZPKW6AQR1YyNhfywkv7B8/FsP3ki6Zv0= +github.com/go-git/go-git/v5 v5.13.2/go.mod h1:hWdW5P4YZRjmpGHwRH2v3zkWcNl6HeXaXQEMGb3NJ9A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= @@ -205,6 +205,10 @@ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN 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-github/v66 v66.0.0 h1:ADJsaXj9UotwdgK8/iFZtv7MLc8E8WBl62WLd/D/9+M= +github.com/google/go-github/v66 v66.0.0/go.mod h1:+4SO9Zkuyf8ytMj0csN1NR/5OTR+MfqPp8P8dVlcvY4= +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/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA= github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= @@ -346,8 +350,8 @@ github.com/pavius/impi v0.0.3 h1:DND6MzU+BLABhOZXbELR3FU8b+zDgcq4dOCNLhiTYuI= github.com/pavius/impi v0.0.3/go.mod h1:x/hU0bfdWIhuOT1SKwiJg++yvkk6EuOtJk8WtDZqgr8= github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= +github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= 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= @@ -429,8 +433,9 @@ 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.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -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/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= @@ -502,18 +507,20 @@ go-simpler.org/musttag v0.13.0 h1:Q/YAW0AHvaoaIbsPj3bvEI5/QFP7w696IMUpnKXQfCE= go-simpler.org/musttag v0.13.0/go.mod h1:FTzIGeK6OkKlUDVpj0iQUXZLUO1Js9+mvykDQy9C5yM= go-simpler.org/sloglint v0.7.2 h1:Wc9Em/Zeuu7JYpl+oKoYOsQSy2X560aVueCW/m6IijY= go-simpler.org/sloglint v0.7.2/go.mod h1:US+9C80ppl7VsThQclkM7BkCHQAzuz8kHLsW3ppuluo= -go.opentelemetry.io/build-tools v0.17.0 h1:mCOZ3YQswjcetUeoMTijn2QPVzwx02Gk1WD200g99lg= -go.opentelemetry.io/build-tools v0.17.0/go.mod h1:ZhuNyO/aAkGEFTfNhH7Nhv7fIWpxIOp8t7XshpPWiOU= -go.opentelemetry.io/build-tools/checkfile v0.17.0 h1:lTlK2Q4KKoC4QIv12UtIN+akgaWlPHB5HVVxgJZ2/xE= -go.opentelemetry.io/build-tools/checkfile v0.17.0/go.mod h1:hfIirAs3HMoLBhOkruPiz0HCKDGMlRW12nOMkQ0hrOI= -go.opentelemetry.io/build-tools/chloggen v0.17.0 h1:aOtA6MW67VoB1HYxcqYIlVxfiBypI/ZTxSb7SU/Jw8g= -go.opentelemetry.io/build-tools/chloggen v0.17.0/go.mod h1:Wk92v9Wsv36sXYi7hOg3ndeeLKmKBu0/kgB7wcaeqJg= -go.opentelemetry.io/build-tools/crosslink v0.17.0 h1:Ivjwh4qp4L+ivRccBOMPIXAVESBMbhbJFEJUGwKsiCM= -go.opentelemetry.io/build-tools/crosslink v0.17.0/go.mod h1:rZRgZZ9uBe2IvR4fJY1kGIWIwiSLm+IvjFsSiPXGq4Q= -go.opentelemetry.io/build-tools/multimod v0.17.0 h1:z0TWbNLcKu1eLx0Pgour/WFA0m+trsRkJ0llM5MsTug= -go.opentelemetry.io/build-tools/multimod v0.17.0/go.mod h1:ImevmVCDyVInTn7L9lN+qVtGs/6cOMQA/Cf3jX1miQA= -go.opentelemetry.io/build-tools/semconvgen v0.17.0 h1:vQk8RJPj9yOCe0cITb+WKMit1Mq9lK72Ws5tuq/KqzU= -go.opentelemetry.io/build-tools/semconvgen v0.17.0/go.mod h1:xkneSVamzk5HpHLB7870NyveeaxpA3Z9BwoMqGxYOBE= +go.opentelemetry.io/build-tools v0.18.0 h1:c07DNSmJxLbgHm1wlvKCjvQTOhd1xtaWqe6+VpzrTXo= +go.opentelemetry.io/build-tools v0.18.0/go.mod h1:ZhuNyO/aAkGEFTfNhH7Nhv7fIWpxIOp8t7XshpPWiOU= +go.opentelemetry.io/build-tools/checkfile v0.18.0 h1:X9zeTrkEco0z71xrSMhRLk1BPakhALi0Uc9Qe+nUZzo= +go.opentelemetry.io/build-tools/checkfile v0.18.0/go.mod h1:hfIirAs3HMoLBhOkruPiz0HCKDGMlRW12nOMkQ0hrOI= +go.opentelemetry.io/build-tools/chloggen v0.18.0 h1:W9mHty4EJjbz742bFS0eT85aHLz85Mqpqd59tVqN3Ls= +go.opentelemetry.io/build-tools/chloggen v0.18.0/go.mod h1:Wk92v9Wsv36sXYi7hOg3ndeeLKmKBu0/kgB7wcaeqJg= +go.opentelemetry.io/build-tools/crosslink v0.18.0 h1:mWB10RvMbb8qg0/5AlySV8NJhCt9BTZRxZa82HDiWvs= +go.opentelemetry.io/build-tools/crosslink v0.18.0/go.mod h1:criIVfHTSMoyVwECMVE55VXhUVWtjpXQtwYkNK87U5g= +go.opentelemetry.io/build-tools/githubgen v0.18.0 h1:ZJHt3Tqu4bpA6nBWN6oQOhQK/QdLQSR4BITn0hf8z98= +go.opentelemetry.io/build-tools/githubgen v0.18.0/go.mod h1:UBpPXtso7exy3VU5EH1ZFfSkYQANJWO/u1lO50qdKkE= +go.opentelemetry.io/build-tools/multimod v0.18.0 h1:zHaEejwAtzUCPyQfPuaZFaIGPiD1JbZDegyEcCVNTKo= +go.opentelemetry.io/build-tools/multimod v0.18.0/go.mod h1:w9GPeYisaI+PeWXsFU9FIL/N6ULXWbI7QRbJHSSOoZw= +go.opentelemetry.io/build-tools/semconvgen v0.18.0 h1:B2JyvirBop1wfV52F/ycQGzx0Zf1Z4rfBOrOwhFUL34= +go.opentelemetry.io/build-tools/semconvgen v0.18.0/go.mod h1:gigFNRBFdaqAuaOMtJM/mF32HjWWDbf7Ucy0BDXMuOY= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= diff --git a/internal/tools/tools.go b/internal/tools/tools.go index 5325cd73d93..a830863d002 100644 --- a/internal/tools/tools.go +++ b/internal/tools/tools.go @@ -20,6 +20,7 @@ import ( _ "go.opentelemetry.io/build-tools/checkfile" _ "go.opentelemetry.io/build-tools/chloggen" _ "go.opentelemetry.io/build-tools/crosslink" + _ "go.opentelemetry.io/build-tools/githubgen" _ "go.opentelemetry.io/build-tools/multimod" _ "go.opentelemetry.io/build-tools/semconvgen" _ "golang.org/x/exp/cmd/apidiff" diff --git a/otelcol/collector.go b/otelcol/collector.go index a0b191053a1..451139c39ad 100644 --- a/otelcol/collector.go +++ b/otelcol/collector.go @@ -21,7 +21,7 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/confmap" - "go.opentelemetry.io/collector/extension" + "go.opentelemetry.io/collector/confmap/xconfmap" "go.opentelemetry.io/collector/otelcol/internal/grpclog" "go.opentelemetry.io/collector/service" ) @@ -157,6 +157,14 @@ func (col *Collector) Shutdown() { } } +func buildModuleInfo(m map[component.Type]string) map[component.Type]service.ModuleInfo { + moduleInfo := make(map[component.Type]service.ModuleInfo) + for k, v := range m { + moduleInfo[k] = service.ModuleInfo{BuilderRef: v} + } + return moduleInfo +} + // setupConfigurationComponents loads the config, creates the graph, and starts the components. If all the steps succeeds it // sets the col.service with the service currently running. func (col *Collector) setupConfigurationComponents(ctx context.Context) error { @@ -171,7 +179,7 @@ func (col *Collector) setupConfigurationComponents(ctx context.Context) error { return fmt.Errorf("failed to get config: %w", err) } - if err = component.ValidateConfig(cfg); err != nil { + if err = xconfmap.Validate(cfg); err != nil { return fmt.Errorf("invalid configuration: %w", err) } @@ -198,12 +206,12 @@ func (col *Collector) setupConfigurationComponents(ctx context.Context) error { ExtensionsConfigs: cfg.Extensions, ExtensionsFactories: factories.Extensions, - ModuleInfo: extension.ModuleInfo{ - Receiver: factories.ReceiverModules, - Processor: factories.ProcessorModules, - Exporter: factories.ExporterModules, - Extension: factories.ExtensionModules, - Connector: factories.ConnectorModules, + ModuleInfos: service.ModuleInfos{ + Receiver: buildModuleInfo(factories.ReceiverModules), + Processor: buildModuleInfo(factories.ProcessorModules), + Exporter: buildModuleInfo(factories.ExporterModules), + Extension: buildModuleInfo(factories.ExtensionModules), + Connector: buildModuleInfo(factories.ConnectorModules), }, AsyncErrorChannel: col.asyncErrorChannel, LoggingOptions: col.set.LoggingOptions, @@ -261,7 +269,7 @@ func (col *Collector) DryRun(ctx context.Context) error { return fmt.Errorf("failed to get config: %w", err) } - return component.ValidateConfig(cfg) + return xconfmap.Validate(cfg) } func newFallbackLogger(options []zap.Option) (*zap.Logger, error) { diff --git a/otelcol/command.go b/otelcol/command.go index 6efd16df562..a0764494e91 100644 --- a/otelcol/command.go +++ b/otelcol/command.go @@ -6,6 +6,9 @@ package otelcol // import "go.opentelemetry.io/collector/otelcol" import ( "errors" "flag" + "fmt" + "os" + "text/tabwriter" "github.com/spf13/cobra" @@ -36,6 +39,7 @@ func NewCommand(set CollectorSettings) *cobra.Command { return col.Run(cmd.Context()) }, } + rootCmd.AddCommand(newFeatureGateCommand()) rootCmd.AddCommand(newComponentsCommand(set)) rootCmd.AddCommand(newValidateSubCommand(set, flagSet)) rootCmd.Flags().AddGoFlagSet(flagSet) @@ -63,3 +67,44 @@ func updateSettingsUsingFlags(set *CollectorSettings, flags *flag.FlagSet) error } return nil } + +func newFeatureGateCommand() *cobra.Command { + return &cobra.Command{ + Use: "featuregate [feature-id]", + Short: "Display feature gates information", + Long: "Display information about available feature gates and their status", + RunE: func(_ *cobra.Command, args []string) error { + if len(args) > 0 { + found := false + featuregate.GlobalRegistry().VisitAll(func(g *featuregate.Gate) { + if g.ID() == args[0] { + found = true + fmt.Printf("Feature: %s\n", g.ID()) + fmt.Printf("Enabled: %v\n", g.IsEnabled()) + fmt.Printf("Stage: %s\n", g.Stage()) + fmt.Printf("Description: %s\n", g.Description()) + fmt.Printf("From Version: %s\n", g.FromVersion()) + if g.ToVersion() != "" { + fmt.Printf("To Version: %s\n", g.ToVersion()) + } + } + }) + if !found { + return fmt.Errorf("feature %q not found", args[0]) + } + return nil + } + + w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) + fmt.Fprintf(w, "ID\tEnabled\tStage\tDescription\n") + featuregate.GlobalRegistry().VisitAll(func(g *featuregate.Gate) { + fmt.Fprintf(w, "%s\t%v\t%s\t%s\n", + g.ID(), + g.IsEnabled(), + g.Stage(), + g.Description()) + }) + return w.Flush() + }, + } +} diff --git a/otelcol/command_test.go b/otelcol/command_test.go index 1a5680fe4ab..56445eea4f3 100644 --- a/otelcol/command_test.go +++ b/otelcol/command_test.go @@ -5,6 +5,8 @@ package otelcol import ( "context" + "io" + "os" "path/filepath" "testing" @@ -159,3 +161,59 @@ func Test_UseUnifiedEnvVarExpansionRules(t *testing.T) { }) } } + +func TestNewFeatureGateCommand(t *testing.T) { + t.Run("list all featuregates", func(t *testing.T) { + cmd := newFeatureGateCommand() + require.NotNil(t, cmd) + + // Capture stdout + oldStdout := os.Stdout + r, w, _ := os.Pipe() + os.Stdout = w + + err := cmd.RunE(cmd, []string{}) + require.NoError(t, err) + + w.Close() + out, _ := io.ReadAll(r) + os.Stdout = oldStdout + + output := string(out) + assert.Contains(t, output, "ID") + assert.Contains(t, output, "Enabled") + assert.Contains(t, output, "Stage") + assert.Contains(t, output, "Description") + }) + t.Run("specific featuregate details", func(t *testing.T) { + cmd := newFeatureGateCommand() + + // Register a test feature gate in the global registry + featuregate.GlobalRegistry().MustRegister("test.feature", featuregate.StageBeta, + featuregate.WithRegisterDescription("Test feature description")) + + // Capture stdout + oldStdout := os.Stdout + r, w, _ := os.Pipe() + os.Stdout = w + + err := cmd.RunE(cmd, []string{"test.feature"}) + require.NoError(t, err) + + w.Close() + out, _ := io.ReadAll(r) + os.Stdout = oldStdout + + output := string(out) + assert.Contains(t, output, "Feature: test.feature") + assert.Contains(t, output, "Description: Test feature description") + assert.Contains(t, output, "Stage: Beta") + }) + + t.Run("non-existent featuregate", func(t *testing.T) { + cmd := newFeatureGateCommand() + err := cmd.RunE(cmd, []string{"non.existent.feature"}) + require.Error(t, err) + assert.Contains(t, err.Error(), "feature \"non.existent.feature\" not found") + }) +} diff --git a/otelcol/config_test.go b/otelcol/config_test.go index e9c766fca0a..d9adc5ce5e7 100644 --- a/otelcol/config_test.go +++ b/otelcol/config_test.go @@ -14,6 +14,7 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/config/configtelemetry" + "go.opentelemetry.io/collector/confmap/xconfmap" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/service" "go.opentelemetry.io/collector/service/pipelines" @@ -241,7 +242,7 @@ func TestConfigValidate(t *testing.T) { for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { cfg := tt.cfgFn() - err := component.ValidateConfig(cfg) + err := xconfmap.Validate(cfg) if tt.expected != nil { assert.EqualError(t, err, tt.expected.Error()) } else { diff --git a/otelcol/go.mod b/otelcol/go.mod index 06e5762c0f9..5870df34e04 100644 --- a/otelcol/go.mod +++ b/otelcol/go.mod @@ -9,6 +9,7 @@ require ( go.opentelemetry.io/collector/component/componentstatus v0.119.0 go.opentelemetry.io/collector/config/configtelemetry v0.119.0 go.opentelemetry.io/collector/confmap v1.25.0 + go.opentelemetry.io/collector/confmap/xconfmap v0.0.0-20250205001856-68ff067415c1 go.opentelemetry.io/collector/connector v0.119.0 go.opentelemetry.io/collector/connector/connectortest v0.119.0 go.opentelemetry.io/collector/exporter v0.119.0 @@ -27,7 +28,7 @@ require ( go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 - golang.org/x/sys v0.29.0 + golang.org/x/sys v0.30.0 google.golang.org/grpc v1.70.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -70,6 +71,7 @@ require ( github.com/tklauser/numcpus v0.6.1 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/collector/component/componentattribute v0.119.0 // indirect go.opentelemetry.io/collector/component/componenttest v0.119.0 // indirect go.opentelemetry.io/collector/connector/xconnector v0.119.0 // indirect go.opentelemetry.io/collector/consumer v1.25.0 // indirect @@ -112,7 +114,7 @@ require ( gonum.org/v1/gonum v0.15.1 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect ) replace go.opentelemetry.io/collector => ../ @@ -141,6 +143,8 @@ replace go.opentelemetry.io/collector/exporter => ../exporter replace go.opentelemetry.io/collector/confmap => ../confmap +replace go.opentelemetry.io/collector/confmap/xconfmap => ../confmap/xconfmap + replace go.opentelemetry.io/collector/config/configtelemetry => ../config/configtelemetry replace go.opentelemetry.io/collector/processor => ../processor @@ -204,3 +208,5 @@ replace go.opentelemetry.io/collector/extension/extensiontest => ../extension/ex replace go.opentelemetry.io/collector/extension/auth/authtest => ../extension/auth/authtest replace go.opentelemetry.io/collector/extension/xextension => ../extension/xextension + +replace go.opentelemetry.io/collector/component/componentattribute => ../component/componentattribute diff --git a/otelcol/go.sum b/otelcol/go.sum index 19fa7a94140..bc9ddd1f5e5 100644 --- a/otelcol/go.sum +++ b/otelcol/go.sum @@ -188,8 +188,8 @@ 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.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.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.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= @@ -210,8 +210,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/otelcol/otelcoltest/config.go b/otelcol/otelcoltest/config.go index 8e414829266..55087dfda29 100644 --- a/otelcol/otelcoltest/config.go +++ b/otelcol/otelcoltest/config.go @@ -6,12 +6,12 @@ package otelcoltest // import "go.opentelemetry.io/collector/otelcol/otelcoltest import ( "context" - "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/confmap/provider/envprovider" "go.opentelemetry.io/collector/confmap/provider/fileprovider" "go.opentelemetry.io/collector/confmap/provider/httpprovider" "go.opentelemetry.io/collector/confmap/provider/yamlprovider" + "go.opentelemetry.io/collector/confmap/xconfmap" "go.opentelemetry.io/collector/otelcol" ) @@ -41,5 +41,5 @@ func LoadConfigAndValidate(fileName string, factories otelcol.Factories) (*otelc if err != nil { return nil, err } - return cfg, component.ValidateConfig(cfg) + return cfg, xconfmap.Validate(cfg) } diff --git a/otelcol/otelcoltest/go.mod b/otelcol/otelcoltest/go.mod index 66904323ffd..b5ab4ed73cb 100644 --- a/otelcol/otelcoltest/go.mod +++ b/otelcol/otelcoltest/go.mod @@ -10,6 +10,7 @@ require ( go.opentelemetry.io/collector/confmap/provider/fileprovider v1.25.0 go.opentelemetry.io/collector/confmap/provider/httpprovider v1.25.0 go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.25.0 + go.opentelemetry.io/collector/confmap/xconfmap v0.0.0-20250205001856-68ff067415c1 go.opentelemetry.io/collector/connector v0.119.0 go.opentelemetry.io/collector/connector/connectortest v0.119.0 go.opentelemetry.io/collector/exporter v0.119.0 @@ -65,6 +66,7 @@ require ( github.com/tklauser/numcpus v0.6.1 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/collector/component/componentattribute v0.119.0 // indirect go.opentelemetry.io/collector/component/componentstatus v0.119.0 // indirect go.opentelemetry.io/collector/component/componenttest v0.119.0 // indirect go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect @@ -110,13 +112,13 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect golang.org/x/net v0.34.0 // indirect - golang.org/x/sys v0.29.0 // indirect + golang.org/x/sys v0.30.0 // indirect golang.org/x/text v0.21.0 // indirect gonum.org/v1/gonum v0.15.1 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -216,6 +218,10 @@ replace go.opentelemetry.io/collector/extension/xextension => ../../extension/xe replace go.opentelemetry.io/collector/confmap => ../../confmap +replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap + replace go.opentelemetry.io/collector/processor/processortest => ../../processor/processortest replace go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata + +replace go.opentelemetry.io/collector/component/componentattribute => ../../component/componentattribute diff --git a/otelcol/otelcoltest/go.sum b/otelcol/otelcoltest/go.sum index 19fa7a94140..bc9ddd1f5e5 100644 --- a/otelcol/otelcoltest/go.sum +++ b/otelcol/otelcoltest/go.sum @@ -188,8 +188,8 @@ 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.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.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.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= @@ -210,8 +210,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/pdata/go.mod b/pdata/go.mod index c9d8523a896..1450bfe37bd 100644 --- a/pdata/go.mod +++ b/pdata/go.mod @@ -9,7 +9,7 @@ require ( go.uber.org/goleak v1.3.0 go.uber.org/multierr v1.11.0 google.golang.org/grpc v1.70.0 - google.golang.org/protobuf v1.36.4 + google.golang.org/protobuf v1.36.5 ) require ( diff --git a/pdata/go.sum b/pdata/go.sum index dbf9feedf0c..ceaafbe9ba0 100644 --- a/pdata/go.sum +++ b/pdata/go.sum @@ -92,8 +92,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/pdata/internal/cmd/pdatagen/internal/pprofile_package.go b/pdata/internal/cmd/pdatagen/internal/pprofile_package.go index cc15b783642..146743f7935 100644 --- a/pdata/internal/cmd/pdatagen/internal/pprofile_package.go +++ b/pdata/internal/cmd/pdatagen/internal/pprofile_package.go @@ -283,11 +283,14 @@ var valueType = &messageValueStruct{ defaultVal: "int32(0)", testVal: "int32(1)", }, - &primitiveField{ - fieldName: "AggregationTemporality", - returnType: "otlpprofiles.AggregationTemporality", - defaultVal: "otlpprofiles.AggregationTemporality(0)", - testVal: "otlpprofiles.AggregationTemporality(1)", + &primitiveTypedField{ + fieldName: "AggregationTemporality", + returnType: &primitiveType{ + structName: "AggregationTemporality", + rawType: "otlpprofiles.AggregationTemporality", + defaultVal: "otlpprofiles.AggregationTemporality(0)", + testVal: "otlpprofiles.AggregationTemporality(1)", + }, }, }, } diff --git a/pdata/metadata.yaml b/pdata/metadata.yaml new file mode 100644 index 00000000000..bcb68722fb9 --- /dev/null +++ b/pdata/metadata.yaml @@ -0,0 +1,8 @@ +type: pdata + +status: + class: pkg + codeowners: + active: + - BogdanDrutu + - dmitryax diff --git a/pdata/pprofile/aggregation_temporality.go b/pdata/pprofile/aggregation_temporality.go new file mode 100644 index 00000000000..b79f8b04097 --- /dev/null +++ b/pdata/pprofile/aggregation_temporality.go @@ -0,0 +1,35 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pprofile // import "go.opentelemetry.io/collector/pdata/pprofile" + +import ( + otlpprofiles "go.opentelemetry.io/collector/pdata/internal/data/protogen/profiles/v1development" +) + +// AggregationTemporality specifies the method of aggregating metric values, +// either DELTA (change since last report) or CUMULATIVE (total since a fixed +// start time). +type AggregationTemporality int32 + +const ( + // AggregationTemporalityUnspecified is the default AggregationTemporality, it MUST NOT be used. + AggregationTemporalityUnspecified = AggregationTemporality(otlpprofiles.AggregationTemporality_AGGREGATION_TEMPORALITY_UNSPECIFIED) + // AggregationTemporalityDelta is a AggregationTemporality for a metric aggregator which reports changes since last report time. + AggregationTemporalityDelta = AggregationTemporality(otlpprofiles.AggregationTemporality_AGGREGATION_TEMPORALITY_DELTA) + // AggregationTemporalityCumulative is a AggregationTemporality for a metric aggregator which reports changes since a fixed start time. + AggregationTemporalityCumulative = AggregationTemporality(otlpprofiles.AggregationTemporality_AGGREGATION_TEMPORALITY_CUMULATIVE) +) + +// String returns the string representation of the AggregationTemporality. +func (at AggregationTemporality) String() string { + switch at { + case AggregationTemporalityUnspecified: + return "Unspecified" + case AggregationTemporalityDelta: + return "Delta" + case AggregationTemporalityCumulative: + return "Cumulative" + } + return "" +} diff --git a/pdata/pprofile/aggregation_temporality_test.go b/pdata/pprofile/aggregation_temporality_test.go new file mode 100644 index 00000000000..eefe2c89e8f --- /dev/null +++ b/pdata/pprofile/aggregation_temporality_test.go @@ -0,0 +1,17 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package pprofile + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestAggregationTemporalityString(t *testing.T) { + assert.Equal(t, "Unspecified", AggregationTemporalityUnspecified.String()) + assert.Equal(t, "Delta", AggregationTemporalityDelta.String()) + assert.Equal(t, "Cumulative", AggregationTemporalityCumulative.String()) + assert.Equal(t, "", (AggregationTemporalityCumulative + 1).String()) +} diff --git a/pdata/pprofile/generated_valuetype.go b/pdata/pprofile/generated_valuetype.go index 2afc8614048..4f8b4e11e6a 100644 --- a/pdata/pprofile/generated_valuetype.go +++ b/pdata/pprofile/generated_valuetype.go @@ -68,14 +68,14 @@ func (ms ValueType) SetUnitStrindex(v int32) { } // AggregationTemporality returns the aggregationtemporality associated with this ValueType. -func (ms ValueType) AggregationTemporality() otlpprofiles.AggregationTemporality { - return ms.orig.AggregationTemporality +func (ms ValueType) AggregationTemporality() AggregationTemporality { + return AggregationTemporality(ms.orig.AggregationTemporality) } // SetAggregationTemporality replaces the aggregationtemporality associated with this ValueType. -func (ms ValueType) SetAggregationTemporality(v otlpprofiles.AggregationTemporality) { +func (ms ValueType) SetAggregationTemporality(v AggregationTemporality) { ms.state.AssertMutable() - ms.orig.AggregationTemporality = v + ms.orig.AggregationTemporality = otlpprofiles.AggregationTemporality(v) } // CopyTo copies all properties from the current struct overriding the destination. diff --git a/pdata/pprofile/generated_valuetype_test.go b/pdata/pprofile/generated_valuetype_test.go index 8e535a15086..8c1b537875f 100644 --- a/pdata/pprofile/generated_valuetype_test.go +++ b/pdata/pprofile/generated_valuetype_test.go @@ -58,13 +58,10 @@ func TestValueType_UnitStrindex(t *testing.T) { func TestValueType_AggregationTemporality(t *testing.T) { ms := NewValueType() - assert.Equal(t, otlpprofiles.AggregationTemporality(0), ms.AggregationTemporality()) - ms.SetAggregationTemporality(otlpprofiles.AggregationTemporality(1)) - assert.Equal(t, otlpprofiles.AggregationTemporality(1), ms.AggregationTemporality()) - sharedState := internal.StateReadOnly - assert.Panics(t, func() { - newValueType(&otlpprofiles.ValueType{}, &sharedState).SetAggregationTemporality(otlpprofiles.AggregationTemporality(1)) - }) + assert.Equal(t, AggregationTemporality(otlpprofiles.AggregationTemporality(0)), ms.AggregationTemporality()) + testValAggregationTemporality := AggregationTemporality(otlpprofiles.AggregationTemporality(1)) + ms.SetAggregationTemporality(testValAggregationTemporality) + assert.Equal(t, testValAggregationTemporality, ms.AggregationTemporality()) } func generateTestValueType() ValueType { diff --git a/pdata/pprofile/go.mod b/pdata/pprofile/go.mod index d593f9592f9..cc1a15a4aae 100644 --- a/pdata/pprofile/go.mod +++ b/pdata/pprofile/go.mod @@ -22,7 +22,7 @@ require ( golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pdata/pprofile/go.sum b/pdata/pprofile/go.sum index 64ba821605e..492ab17649f 100644 --- a/pdata/pprofile/go.sum +++ b/pdata/pprofile/go.sum @@ -87,8 +87,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/pdata/pprofile/metadata.yaml b/pdata/pprofile/metadata.yaml new file mode 100644 index 00000000000..3c4bd0dca76 --- /dev/null +++ b/pdata/pprofile/metadata.yaml @@ -0,0 +1,10 @@ +type: pprofile + +status: + class: pdata + codeowners: + active: + - mx-psi + - dmathieu + stability: + development: [profiles] diff --git a/pdata/testdata/go.mod b/pdata/testdata/go.mod index 41728e0f08e..342a1cbe749 100644 --- a/pdata/testdata/go.mod +++ b/pdata/testdata/go.mod @@ -18,7 +18,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect ) replace go.opentelemetry.io/collector/pdata => ../ diff --git a/pdata/testdata/go.sum b/pdata/testdata/go.sum index 1895b70afcb..93491c0461c 100644 --- a/pdata/testdata/go.sum +++ b/pdata/testdata/go.sum @@ -80,7 +80,7 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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/processor/batchprocessor/go.mod b/processor/batchprocessor/go.mod index dbd1d2091c3..fbab733ab36 100644 --- a/processor/batchprocessor/go.mod +++ b/processor/batchprocessor/go.mod @@ -41,7 +41,6 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/component/componentstatus v0.119.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.119.0 // indirect go.opentelemetry.io/collector/pipeline v0.119.0 // indirect @@ -53,7 +52,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -78,8 +77,6 @@ retract ( v0.69.0 // Release failed, use v0.69.1 ) -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile replace go.opentelemetry.io/collector/consumer/xconsumer => ../../consumer/xconsumer diff --git a/processor/batchprocessor/go.sum b/processor/batchprocessor/go.sum index 8bd3034e9c0..df70cc6d1c3 100644 --- a/processor/batchprocessor/go.sum +++ b/processor/batchprocessor/go.sum @@ -103,8 +103,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/processor/batchprocessor/internal/metadata/generated_telemetry.go b/processor/batchprocessor/internal/metadata/generated_telemetry.go index 4df4a713d44..1ce05b2b032 100644 --- a/processor/batchprocessor/internal/metadata/generated_telemetry.go +++ b/processor/batchprocessor/internal/metadata/generated_telemetry.go @@ -48,16 +48,6 @@ func (tbof telemetryBuilderOptionFunc) apply(mb *TelemetryBuilder) { tbof(mb) } -// Deprecated: [v0.119.0] use RegisterProcessorBatchMetadataCardinalityCallback. -func WithProcessorBatchMetadataCardinalityCallback(cb func() int64, opts ...metric.ObserveOption) TelemetryBuilderOption { - return telemetryBuilderOptionFunc(func(builder *TelemetryBuilder) { - builder.observeProcessorBatchMetadataCardinality = func(_ context.Context, o metric.Observer) error { - o.ObserveInt64(builder.ProcessorBatchMetadataCardinality, cb(), opts...) - return nil - } - }) -} - // RegisterProcessorBatchMetadataCardinalityCallback sets callback for observable ProcessorBatchMetadataCardinality metric. func (builder *TelemetryBuilder) RegisterProcessorBatchMetadataCardinalityCallback(cb metric.Int64Callback) error { reg, err := builder.meter.RegisterCallback(func(ctx context.Context, o metric.Observer) error { diff --git a/processor/batchprocessor/internal/metadatatest/generated_telemetrytest.go b/processor/batchprocessor/internal/metadatatest/generated_telemetrytest.go index cdd85b387d4..a79b6933aca 100644 --- a/processor/batchprocessor/internal/metadatatest/generated_telemetrytest.go +++ b/processor/batchprocessor/internal/metadatatest/generated_telemetrytest.go @@ -3,7 +3,6 @@ package metadatatest import ( - "context" "testing" "github.com/stretchr/testify/require" @@ -16,21 +15,6 @@ import ( "go.opentelemetry.io/collector/processor/processortest" ) -// Deprecated: [v0.119.0] Use componenttest.Telemetry -type Telemetry struct { - *componenttest.Telemetry -} - -// Deprecated: [v0.119.0] Use componenttest.NewTelemetry -func SetupTelemetry(opts ...componenttest.TelemetryOption) Telemetry { - return Telemetry{Telemetry: componenttest.NewTelemetry(opts...)} -} - -// Deprecated: [v0.119.0] Use metadatatest.NewSettings -func (tt *Telemetry) NewSettings() processor.Settings { - return NewSettings(tt.Telemetry) -} - func NewSettings(tt *componenttest.Telemetry) processor.Settings { set := processortest.NewNopSettings() set.ID = component.NewID(component.MustNewType("batch")) @@ -38,20 +22,6 @@ func NewSettings(tt *componenttest.Telemetry) processor.Settings { return set } -// Deprecated: [v0.119.0] Use metadatatest.AssertEqual* -func (tt *Telemetry) AssertMetrics(t *testing.T, expected []metricdata.Metrics, opts ...metricdatatest.Option) { - var md metricdata.ResourceMetrics - require.NoError(t, tt.Reader.Collect(context.Background(), &md)) - // ensure all required metrics are present - for _, want := range expected { - got := getMetricFromResource(want.Name, md) - metricdatatest.AssertEqual(t, want, got, opts...) - } - - // ensure no additional metrics are emitted - require.Equal(t, len(expected), lenMetrics(md)) -} - func AssertEqualProcessorBatchBatchSendSize(t *testing.T, tt *componenttest.Telemetry, dps []metricdata.HistogramDataPoint[int64], opts ...metricdatatest.Option) { want := metricdata.Metrics{ Name: "otelcol_processor_batch_batch_send_size", diff --git a/processor/batchprocessor/internal/metadatatest/generated_telemetrytest_test.go b/processor/batchprocessor/internal/metadatatest/generated_telemetrytest_test.go index c6e26145bbb..bc53abadfe0 100644 --- a/processor/batchprocessor/internal/metadatatest/generated_telemetrytest_test.go +++ b/processor/batchprocessor/internal/metadatatest/generated_telemetrytest_test.go @@ -11,11 +11,12 @@ import ( "go.opentelemetry.io/otel/sdk/metric/metricdata" "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest" + "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/processor/batchprocessor/internal/metadata" ) func TestSetupTelemetry(t *testing.T) { - testTel := SetupTelemetry() + testTel := componenttest.NewTelemetry() tb, err := metadata.NewTelemetryBuilder(testTel.NewTelemetrySettings()) require.NoError(t, err) defer tb.Shutdown() @@ -27,80 +28,19 @@ func TestSetupTelemetry(t *testing.T) { tb.ProcessorBatchBatchSendSizeBytes.Record(context.Background(), 1) tb.ProcessorBatchBatchSizeTriggerSend.Add(context.Background(), 1) tb.ProcessorBatchTimeoutTriggerSend.Add(context.Background(), 1) - - testTel.AssertMetrics(t, []metricdata.Metrics{ - { - Name: "otelcol_processor_batch_batch_send_size", - Description: "Number of units in the batch", - Unit: "{units}", - Data: metricdata.Histogram[int64]{ - Temporality: metricdata.CumulativeTemporality, - DataPoints: []metricdata.HistogramDataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_processor_batch_batch_send_size_bytes", - Description: "Number of bytes in batch that was sent. Only available on detailed level.", - Unit: "By", - Data: metricdata.Histogram[int64]{ - Temporality: metricdata.CumulativeTemporality, - DataPoints: []metricdata.HistogramDataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_processor_batch_batch_size_trigger_send", - Description: "Number of times the batch was sent due to a size trigger", - Unit: "{times}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_processor_batch_metadata_cardinality", - Description: "Number of distinct metadata value combinations being processed", - Unit: "{combinations}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: false, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_processor_batch_timeout_trigger_send", - Description: "Number of times the batch was sent due to a timeout trigger", - Unit: "{times}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreValue()) - AssertEqualProcessorBatchBatchSendSize(t, testTel.Telemetry, + AssertEqualProcessorBatchBatchSendSize(t, testTel, []metricdata.HistogramDataPoint[int64]{{}}, metricdatatest.IgnoreValue(), metricdatatest.IgnoreTimestamp()) - AssertEqualProcessorBatchBatchSendSizeBytes(t, testTel.Telemetry, + AssertEqualProcessorBatchBatchSendSizeBytes(t, testTel, []metricdata.HistogramDataPoint[int64]{{}}, metricdatatest.IgnoreValue(), metricdatatest.IgnoreTimestamp()) - AssertEqualProcessorBatchBatchSizeTriggerSend(t, testTel.Telemetry, + AssertEqualProcessorBatchBatchSizeTriggerSend(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessorBatchMetadataCardinality(t, testTel.Telemetry, + AssertEqualProcessorBatchMetadataCardinality(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessorBatchTimeoutTriggerSend(t, testTel.Telemetry, + AssertEqualProcessorBatchTimeoutTriggerSend(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) diff --git a/processor/go.mod b/processor/go.mod index 3cecef59d81..d6f8ef2a0c1 100644 --- a/processor/go.mod +++ b/processor/go.mod @@ -30,7 +30,6 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/component/componentstatus v0.119.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.119.0 // indirect go.opentelemetry.io/collector/pdata/testdata v0.119.0 // indirect @@ -43,7 +42,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -59,8 +58,6 @@ replace go.opentelemetry.io/collector/pdata/testdata => ../pdata/testdata replace go.opentelemetry.io/collector/pdata/pprofile => ../pdata/pprofile -replace go.opentelemetry.io/collector/config/configtelemetry => ../config/configtelemetry - replace go.opentelemetry.io/collector/consumer/xconsumer => ../consumer/xconsumer replace go.opentelemetry.io/collector/consumer/consumertest => ../consumer/consumertest diff --git a/processor/go.sum b/processor/go.sum index d4734044891..c4987361a75 100644 --- a/processor/go.sum +++ b/processor/go.sum @@ -91,8 +91,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/processor/memorylimiterprocessor/factory.go b/processor/memorylimiterprocessor/factory.go index 03e18aeedc6..5f2f5f89e94 100644 --- a/processor/memorylimiterprocessor/factory.go +++ b/processor/memorylimiterprocessor/factory.go @@ -10,6 +10,7 @@ import ( "sync" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componentattribute" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/processor" "go.opentelemetry.io/collector/processor/memorylimiterprocessor/internal/metadata" @@ -105,6 +106,13 @@ func (f *factory) getMemoryLimiter(set processor.Settings, cfg component.Config) return memLimiter, nil } + set.Logger = set.TelemetrySettings.LoggerWithout( + componentattribute.SignalKey, + componentattribute.PipelineIDKey, + componentattribute.ComponentIDKey, + ) + set.Logger.Debug("created singleton logger") + memLimiter, err := newMemoryLimiterProcessor(set, cfg.(*Config)) if err != nil { return nil, err diff --git a/processor/memorylimiterprocessor/factory_test.go b/processor/memorylimiterprocessor/factory_test.go index 31a2fabab5a..1d56702f76c 100644 --- a/processor/memorylimiterprocessor/factory_test.go +++ b/processor/memorylimiterprocessor/factory_test.go @@ -10,10 +10,16 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel/attribute" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "go.uber.org/zap/zaptest/observer" + "go.opentelemetry.io/collector/component/componentattribute" "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/internal/memorylimiter" + "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/processor/processortest" ) @@ -38,19 +44,28 @@ func TestCreateProcessor(t *testing.T) { pCfg.MemorySpikeLimitMiB = 1907 pCfg.CheckInterval = 100 * time.Millisecond - tp, err := factory.CreateTraces(context.Background(), processortest.NewNopSettings(), cfg, consumertest.NewNop()) + core, observer := observer.New(zapcore.DebugLevel) + attrs := attribute.NewSet( + attribute.String(componentattribute.SignalKey, pipeline.SignalLogs.String()), + attribute.String(componentattribute.ComponentIDKey, "memorylimiter"), + attribute.String(componentattribute.PipelineIDKey, "logs/foo"), + ) + set := processortest.NewNopSettings() + set.Logger = componentattribute.NewLogger(zap.New(core), &attrs) + + tp, err := factory.CreateTraces(context.Background(), set, cfg, consumertest.NewNop()) require.NoError(t, err) assert.NotNil(t, tp) // test if we can shutdown a monitoring routine that has not started require.ErrorIs(t, tp.Shutdown(context.Background()), memorylimiter.ErrShutdownNotStarted) require.NoError(t, tp.Start(context.Background(), componenttest.NewNopHost())) - mp, err := factory.CreateMetrics(context.Background(), processortest.NewNopSettings(), cfg, consumertest.NewNop()) + mp, err := factory.CreateMetrics(context.Background(), set, cfg, consumertest.NewNop()) require.NoError(t, err) assert.NotNil(t, mp) require.NoError(t, mp.Start(context.Background(), componenttest.NewNopHost())) - lp, err := factory.CreateLogs(context.Background(), processortest.NewNopSettings(), cfg, consumertest.NewNop()) + lp, err := factory.CreateLogs(context.Background(), set, cfg, consumertest.NewNop()) require.NoError(t, err) assert.NotNil(t, lp) assert.NoError(t, lp.Start(context.Background(), componenttest.NewNopHost())) @@ -65,5 +80,14 @@ func TestCreateProcessor(t *testing.T) { assert.NoError(t, lp.Start(context.Background(), componenttest.NewNopHost())) assert.NoError(t, lp.Shutdown(context.Background())) // calling it again should throw an error - assert.ErrorIs(t, lp.Shutdown(context.Background()), memorylimiter.ErrShutdownNotStarted) + require.ErrorIs(t, lp.Shutdown(context.Background()), memorylimiter.ErrShutdownNotStarted) + + var createLoggerCount int + for _, log := range observer.All() { + if log.Message == "created singleton logger" { + createLoggerCount++ + assert.Empty(t, observer.All()[0].Context) + } + } + assert.Equal(t, 1, createLoggerCount) } diff --git a/processor/memorylimiterprocessor/go.mod b/processor/memorylimiterprocessor/go.mod index 61358e355e8..db8f58419ea 100644 --- a/processor/memorylimiterprocessor/go.mod +++ b/processor/memorylimiterprocessor/go.mod @@ -5,6 +5,7 @@ go 1.22.0 require ( github.com/stretchr/testify v1.10.0 go.opentelemetry.io/collector/component v0.119.0 + go.opentelemetry.io/collector/component/componentattribute v0.119.0 go.opentelemetry.io/collector/component/componenttest v0.119.0 go.opentelemetry.io/collector/confmap v1.25.0 go.opentelemetry.io/collector/consumer v1.25.0 @@ -20,6 +21,7 @@ require ( go.opentelemetry.io/otel/sdk/metric v1.34.0 go.opentelemetry.io/otel/trace v1.34.0 go.uber.org/goleak v1.3.0 + go.uber.org/zap v1.27.0 ) require ( @@ -48,20 +50,18 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/component/componentstatus v0.119.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.119.0 // indirect go.opentelemetry.io/collector/pdata/testdata v0.119.0 // indirect go.opentelemetry.io/collector/processor/xprocessor v0.119.0 // indirect go.opentelemetry.io/otel/sdk v1.34.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.27.0 // indirect golang.org/x/net v0.33.0 // indirect golang.org/x/sys v0.29.0 // indirect golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -86,8 +86,6 @@ retract ( v0.69.0 // Release failed, use v0.69.1 ) -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile replace go.opentelemetry.io/collector/consumer/xconsumer => ../../consumer/xconsumer @@ -103,3 +101,5 @@ replace go.opentelemetry.io/collector/pipeline => ../../pipeline replace go.opentelemetry.io/collector/internal/memorylimiter => ../../internal/memorylimiter replace go.opentelemetry.io/collector/consumer/consumererror => ../../consumer/consumererror + +replace go.opentelemetry.io/collector/component/componentattribute => ../../component/componentattribute diff --git a/processor/memorylimiterprocessor/go.sum b/processor/memorylimiterprocessor/go.sum index 18a9e6a7717..dab393654bc 100644 --- a/processor/memorylimiterprocessor/go.sum +++ b/processor/memorylimiterprocessor/go.sum @@ -124,8 +124,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/processor/memorylimiterprocessor/internal/metadatatest/generated_telemetrytest.go b/processor/memorylimiterprocessor/internal/metadatatest/generated_telemetrytest.go index fd030bc55c9..38fcc2ef45b 100644 --- a/processor/memorylimiterprocessor/internal/metadatatest/generated_telemetrytest.go +++ b/processor/memorylimiterprocessor/internal/metadatatest/generated_telemetrytest.go @@ -3,7 +3,6 @@ package metadatatest import ( - "context" "testing" "github.com/stretchr/testify/require" @@ -16,21 +15,6 @@ import ( "go.opentelemetry.io/collector/processor/processortest" ) -// Deprecated: [v0.119.0] Use componenttest.Telemetry -type Telemetry struct { - *componenttest.Telemetry -} - -// Deprecated: [v0.119.0] Use componenttest.NewTelemetry -func SetupTelemetry(opts ...componenttest.TelemetryOption) Telemetry { - return Telemetry{Telemetry: componenttest.NewTelemetry(opts...)} -} - -// Deprecated: [v0.119.0] Use metadatatest.NewSettings -func (tt *Telemetry) NewSettings() processor.Settings { - return NewSettings(tt.Telemetry) -} - func NewSettings(tt *componenttest.Telemetry) processor.Settings { set := processortest.NewNopSettings() set.ID = component.NewID(component.MustNewType("memory_limiter")) @@ -38,20 +22,6 @@ func NewSettings(tt *componenttest.Telemetry) processor.Settings { return set } -// Deprecated: [v0.119.0] Use metadatatest.AssertEqual* -func (tt *Telemetry) AssertMetrics(t *testing.T, expected []metricdata.Metrics, opts ...metricdatatest.Option) { - var md metricdata.ResourceMetrics - require.NoError(t, tt.Reader.Collect(context.Background(), &md)) - // ensure all required metrics are present - for _, want := range expected { - got := getMetricFromResource(want.Name, md) - metricdatatest.AssertEqual(t, want, got, opts...) - } - - // ensure no additional metrics are emitted - require.Equal(t, len(expected), lenMetrics(md)) -} - func AssertEqualProcessorAcceptedLogRecords(t *testing.T, tt *componenttest.Telemetry, dps []metricdata.DataPoint[int64], opts ...metricdatatest.Option) { want := metricdata.Metrics{ Name: "otelcol_processor_accepted_log_records", diff --git a/processor/memorylimiterprocessor/internal/metadatatest/generated_telemetrytest_test.go b/processor/memorylimiterprocessor/internal/metadatatest/generated_telemetrytest_test.go index efd76cd6a7f..ae69ca58fe8 100644 --- a/processor/memorylimiterprocessor/internal/metadatatest/generated_telemetrytest_test.go +++ b/processor/memorylimiterprocessor/internal/metadatatest/generated_telemetrytest_test.go @@ -10,11 +10,12 @@ import ( "go.opentelemetry.io/otel/sdk/metric/metricdata" "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest" + "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/processor/memorylimiterprocessor/internal/metadata" ) func TestSetupTelemetry(t *testing.T) { - testTel := SetupTelemetry() + testTel := componenttest.NewTelemetry() tb, err := metadata.NewTelemetryBuilder(testTel.NewTelemetrySettings()) require.NoError(t, err) defer tb.Shutdown() @@ -24,97 +25,22 @@ func TestSetupTelemetry(t *testing.T) { tb.ProcessorRefusedLogRecords.Add(context.Background(), 1) tb.ProcessorRefusedMetricPoints.Add(context.Background(), 1) tb.ProcessorRefusedSpans.Add(context.Background(), 1) - - testTel.AssertMetrics(t, []metricdata.Metrics{ - { - Name: "otelcol_processor_accepted_log_records", - Description: "Number of log records successfully pushed into the next component in the pipeline. [deprecated since v0.110.0]", - Unit: "{records}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_processor_accepted_metric_points", - Description: "Number of metric points successfully pushed into the next component in the pipeline. [deprecated since v0.110.0]", - Unit: "{datapoints}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_processor_accepted_spans", - Description: "Number of spans successfully pushed into the next component in the pipeline. [deprecated since v0.110.0]", - Unit: "{spans}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_processor_refused_log_records", - Description: "Number of log records that were rejected by the next component in the pipeline. [deprecated since v0.110.0]", - Unit: "{records}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_processor_refused_metric_points", - Description: "Number of metric points that were rejected by the next component in the pipeline. [deprecated since v0.110.0]", - Unit: "{datapoints}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_processor_refused_spans", - Description: "Number of spans that were rejected by the next component in the pipeline. [deprecated since v0.110.0]", - Unit: "{spans}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreValue()) - AssertEqualProcessorAcceptedLogRecords(t, testTel.Telemetry, + AssertEqualProcessorAcceptedLogRecords(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessorAcceptedMetricPoints(t, testTel.Telemetry, + AssertEqualProcessorAcceptedMetricPoints(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessorAcceptedSpans(t, testTel.Telemetry, + AssertEqualProcessorAcceptedSpans(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessorRefusedLogRecords(t, testTel.Telemetry, + AssertEqualProcessorRefusedLogRecords(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessorRefusedMetricPoints(t, testTel.Telemetry, + AssertEqualProcessorRefusedMetricPoints(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessorRefusedSpans(t, testTel.Telemetry, + AssertEqualProcessorRefusedSpans(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) diff --git a/processor/processorhelper/internal/metadatatest/generated_telemetrytest.go b/processor/processorhelper/internal/metadatatest/generated_telemetrytest.go index 7d16af7e430..d9d844e145b 100644 --- a/processor/processorhelper/internal/metadatatest/generated_telemetrytest.go +++ b/processor/processorhelper/internal/metadatatest/generated_telemetrytest.go @@ -3,7 +3,6 @@ package metadatatest import ( - "context" "testing" "github.com/stretchr/testify/require" @@ -16,21 +15,6 @@ import ( "go.opentelemetry.io/collector/processor/processortest" ) -// Deprecated: [v0.119.0] Use componenttest.Telemetry -type Telemetry struct { - *componenttest.Telemetry -} - -// Deprecated: [v0.119.0] Use componenttest.NewTelemetry -func SetupTelemetry(opts ...componenttest.TelemetryOption) Telemetry { - return Telemetry{Telemetry: componenttest.NewTelemetry(opts...)} -} - -// Deprecated: [v0.119.0] Use metadatatest.NewSettings -func (tt *Telemetry) NewSettings() processor.Settings { - return NewSettings(tt.Telemetry) -} - func NewSettings(tt *componenttest.Telemetry) processor.Settings { set := processortest.NewNopSettings() set.ID = component.NewID(component.MustNewType("processorhelper")) @@ -38,20 +22,6 @@ func NewSettings(tt *componenttest.Telemetry) processor.Settings { return set } -// Deprecated: [v0.119.0] Use metadatatest.AssertEqual* -func (tt *Telemetry) AssertMetrics(t *testing.T, expected []metricdata.Metrics, opts ...metricdatatest.Option) { - var md metricdata.ResourceMetrics - require.NoError(t, tt.Reader.Collect(context.Background(), &md)) - // ensure all required metrics are present - for _, want := range expected { - got := getMetricFromResource(want.Name, md) - metricdatatest.AssertEqual(t, want, got, opts...) - } - - // ensure no additional metrics are emitted - require.Equal(t, len(expected), lenMetrics(md)) -} - func AssertEqualProcessorIncomingItems(t *testing.T, tt *componenttest.Telemetry, dps []metricdata.DataPoint[int64], opts ...metricdatatest.Option) { want := metricdata.Metrics{ Name: "otelcol_processor_incoming_items", diff --git a/processor/processorhelper/internal/metadatatest/generated_telemetrytest_test.go b/processor/processorhelper/internal/metadatatest/generated_telemetrytest_test.go index af29892951b..701bc100bdf 100644 --- a/processor/processorhelper/internal/metadatatest/generated_telemetrytest_test.go +++ b/processor/processorhelper/internal/metadatatest/generated_telemetrytest_test.go @@ -10,47 +10,21 @@ import ( "go.opentelemetry.io/otel/sdk/metric/metricdata" "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest" + "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/processor/processorhelper/internal/metadata" ) func TestSetupTelemetry(t *testing.T) { - testTel := SetupTelemetry() + testTel := componenttest.NewTelemetry() tb, err := metadata.NewTelemetryBuilder(testTel.NewTelemetrySettings()) require.NoError(t, err) defer tb.Shutdown() tb.ProcessorIncomingItems.Add(context.Background(), 1) tb.ProcessorOutgoingItems.Add(context.Background(), 1) - - testTel.AssertMetrics(t, []metricdata.Metrics{ - { - Name: "otelcol_processor_incoming_items", - Description: "Number of items passed to the processor. [alpha]", - Unit: "{items}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_processor_outgoing_items", - Description: "Number of items emitted from the processor. [alpha]", - Unit: "{items}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreValue()) - AssertEqualProcessorIncomingItems(t, testTel.Telemetry, + AssertEqualProcessorIncomingItems(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessorOutgoingItems(t, testTel.Telemetry, + AssertEqualProcessorOutgoingItems(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) diff --git a/processor/processorhelper/xprocessorhelper/go.mod b/processor/processorhelper/xprocessorhelper/go.mod index e706222d3bb..aebc4a212c5 100644 --- a/processor/processorhelper/xprocessorhelper/go.mod +++ b/processor/processorhelper/xprocessorhelper/go.mod @@ -27,7 +27,6 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/component/componentstatus v0.119.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/collector/pdata/testdata v0.119.0 // indirect go.opentelemetry.io/collector/pipeline v0.119.0 // indirect @@ -43,7 +42,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -65,8 +64,6 @@ replace go.opentelemetry.io/collector/component/componenttest => ../../../compon replace go.opentelemetry.io/collector/pdata => ../../../pdata -replace go.opentelemetry.io/collector/config/configtelemetry => ../../../config/configtelemetry - replace go.opentelemetry.io/collector/pipeline => ../../../pipeline replace go.opentelemetry.io/collector/component/componentstatus => ../../../component/componentstatus diff --git a/processor/processorhelper/xprocessorhelper/go.sum b/processor/processorhelper/xprocessorhelper/go.sum index d4734044891..c4987361a75 100644 --- a/processor/processorhelper/xprocessorhelper/go.sum +++ b/processor/processorhelper/xprocessorhelper/go.sum @@ -91,8 +91,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/processor/processortest/go.mod b/processor/processortest/go.mod index 302b59b000f..f7f188e2117 100644 --- a/processor/processortest/go.mod +++ b/processor/processortest/go.mod @@ -30,7 +30,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect go.opentelemetry.io/otel/sdk v1.34.0 // indirect @@ -43,7 +42,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -69,6 +68,4 @@ replace go.opentelemetry.io/collector/processor => ../../processor replace go.opentelemetry.io/collector/processor/xprocessor => ../../processor/xprocessor -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/pipeline => ../../pipeline diff --git a/processor/processortest/go.sum b/processor/processortest/go.sum index d4734044891..c4987361a75 100644 --- a/processor/processortest/go.sum +++ b/processor/processortest/go.sum @@ -91,8 +91,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/processor/xprocessor/go.mod b/processor/xprocessor/go.mod index 778aa1fd0b9..60d0c416e2a 100644 --- a/processor/xprocessor/go.mod +++ b/processor/xprocessor/go.mod @@ -18,7 +18,6 @@ require ( 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.119.0 // indirect go.opentelemetry.io/collector/consumer v1.25.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.119.0 // indirect @@ -32,14 +31,12 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) replace go.opentelemetry.io/collector/processor => ../ -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile replace go.opentelemetry.io/collector/consumer => ../../consumer diff --git a/processor/xprocessor/go.sum b/processor/xprocessor/go.sum index 19674bfc86e..d0f00ae46b4 100644 --- a/processor/xprocessor/go.sum +++ b/processor/xprocessor/go.sum @@ -90,8 +90,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/processor/xprocessor/metadata.yaml b/processor/xprocessor/metadata.yaml new file mode 100644 index 00000000000..bc13ced4a6a --- /dev/null +++ b/processor/xprocessor/metadata.yaml @@ -0,0 +1,10 @@ +type: xprocessor + +status: + class: processor + codeowners: + active: + - mx-psi + - dmathieu + stability: + development: [profiles] diff --git a/receiver/go.mod b/receiver/go.mod index 09043feb2d8..c8c7d8259f2 100644 --- a/receiver/go.mod +++ b/receiver/go.mod @@ -28,7 +28,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/consumererror v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect @@ -42,7 +41,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -56,8 +55,6 @@ replace go.opentelemetry.io/collector/pdata => ../pdata replace go.opentelemetry.io/collector/pdata/testdata => ../pdata/testdata -replace go.opentelemetry.io/collector/config/configtelemetry => ../config/configtelemetry - replace go.opentelemetry.io/collector/pdata/pprofile => ../pdata/pprofile replace go.opentelemetry.io/collector/consumer/xconsumer => ../consumer/xconsumer diff --git a/receiver/go.sum b/receiver/go.sum index d4734044891..c4987361a75 100644 --- a/receiver/go.sum +++ b/receiver/go.sum @@ -91,8 +91,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/receiver/nopreceiver/README.md b/receiver/nopreceiver/README.md index b9f5942d4fd..027ee2f5e21 100644 --- a/receiver/nopreceiver/README.md +++ b/receiver/nopreceiver/README.md @@ -6,6 +6,7 @@ | Stability | [beta]: traces, metrics, logs | | Distributions | [core], [contrib] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector?query=is%3Aissue%20is%3Aopen%20label%3Areceiver%2Fnop%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector/issues?q=is%3Aopen+is%3Aissue+label%3Areceiver%2Fnop) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector?query=is%3Aissue%20is%3Aclosed%20label%3Areceiver%2Fnop%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector/issues?q=is%3Aclosed+is%3Aissue+label%3Areceiver%2Fnop) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@evan-bradley](https://www.github.com/evan-bradley) | [beta]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/component-stability.md#beta [core]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol diff --git a/receiver/nopreceiver/go.mod b/receiver/nopreceiver/go.mod index 7ab6fa625e2..5132bd89c2e 100644 --- a/receiver/nopreceiver/go.mod +++ b/receiver/nopreceiver/go.mod @@ -31,7 +31,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/consumererror v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect @@ -50,7 +49,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -68,8 +67,6 @@ replace go.opentelemetry.io/collector/pdata => ../../pdata replace go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile replace go.opentelemetry.io/collector/consumer/xconsumer => ../../consumer/xconsumer diff --git a/receiver/nopreceiver/go.sum b/receiver/nopreceiver/go.sum index 8bd3034e9c0..df70cc6d1c3 100644 --- a/receiver/nopreceiver/go.sum +++ b/receiver/nopreceiver/go.sum @@ -103,8 +103,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/receiver/nopreceiver/metadata.yaml b/receiver/nopreceiver/metadata.yaml index 6a994d88c10..41abca3c9fb 100644 --- a/receiver/nopreceiver/metadata.yaml +++ b/receiver/nopreceiver/metadata.yaml @@ -2,6 +2,9 @@ type: nop github_project: open-telemetry/opentelemetry-collector status: + codeowners: + active: + - evan-bradley class: receiver stability: beta: [traces, metrics, logs] diff --git a/receiver/otlpreceiver/config_test.go b/receiver/otlpreceiver/config_test.go index dc00872dd29..5261b60600a 100644 --- a/receiver/otlpreceiver/config_test.go +++ b/receiver/otlpreceiver/config_test.go @@ -19,6 +19,7 @@ import ( "go.opentelemetry.io/collector/config/configtls" "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/confmap/confmaptest" + "go.opentelemetry.io/collector/confmap/xconfmap" ) func TestUnmarshalDefaultConfig(t *testing.T) { @@ -193,7 +194,7 @@ func TestUnmarshalConfigEmptyProtocols(t *testing.T) { factory := NewFactory() cfg := factory.CreateDefaultConfig() require.NoError(t, cm.Unmarshal(&cfg)) - assert.EqualError(t, component.ValidateConfig(cfg), "must specify at least one protocol when using the OTLP receiver") + assert.EqualError(t, xconfmap.Validate(cfg), "must specify at least one protocol when using the OTLP receiver") } func TestUnmarshalConfigInvalidSignalPath(t *testing.T) { @@ -230,5 +231,5 @@ func TestUnmarshalConfigEmpty(t *testing.T) { factory := NewFactory() cfg := factory.CreateDefaultConfig() require.NoError(t, confmap.New().Unmarshal(&cfg)) - assert.EqualError(t, component.ValidateConfig(cfg), "must specify at least one protocol when using the OTLP receiver") + assert.EqualError(t, xconfmap.Validate(cfg), "must specify at least one protocol when using the OTLP receiver") } diff --git a/receiver/otlpreceiver/factory_test.go b/receiver/otlpreceiver/factory_test.go index 58f5f3b6c7e..9d9bad98689 100644 --- a/receiver/otlpreceiver/factory_test.go +++ b/receiver/otlpreceiver/factory_test.go @@ -9,7 +9,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel/attribute" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "go.uber.org/zap/zaptest/observer" + "go.opentelemetry.io/collector/component/componentattribute" "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config/configgrpc" "go.opentelemetry.io/collector/config/confighttp" @@ -35,7 +40,13 @@ func TestCreateSameReceiver(t *testing.T) { cfg.GRPC.NetAddr.Endpoint = testutil.GetAvailableLocalAddress(t) cfg.HTTP.Endpoint = testutil.GetAvailableLocalAddress(t) + core, observer := observer.New(zapcore.DebugLevel) + attrs := attribute.NewSet( + attribute.String(componentattribute.SignalKey, "traces"), // should be removed + attribute.String(componentattribute.ComponentIDKey, "otlp"), + ) creationSet := receivertest.NewNopSettings() + creationSet.Logger = componentattribute.NewLogger(zap.New(core), &attrs) tReceiver, err := factory.CreateTraces(context.Background(), creationSet, cfg, consumertest.NewNop()) assert.NotNil(t, tReceiver) require.NoError(t, err) @@ -55,6 +66,17 @@ func TestCreateSameReceiver(t *testing.T) { assert.Same(t, tReceiver, mReceiver) assert.Same(t, tReceiver, lReceiver) assert.Same(t, tReceiver, pReceiver) + + var createLoggerCount int + for _, log := range observer.All() { + if log.Message == "created signal-agnostic logger" { + createLoggerCount++ + require.Len(t, log.Context, 1) + assert.Equal(t, componentattribute.ComponentIDKey, log.Context[0].Key) + assert.Equal(t, "otlp", log.Context[0].String) + } + } + assert.Equal(t, 1, createLoggerCount) } func TestCreateTraces(t *testing.T) { diff --git a/receiver/otlpreceiver/go.mod b/receiver/otlpreceiver/go.mod index f6f19494d6c..ea4fef3db9f 100644 --- a/receiver/otlpreceiver/go.mod +++ b/receiver/otlpreceiver/go.mod @@ -8,6 +8,7 @@ require ( github.com/stretchr/testify v1.10.0 go.opentelemetry.io/collector v0.119.0 go.opentelemetry.io/collector/component v0.119.0 + go.opentelemetry.io/collector/component/componentattribute v0.119.0 go.opentelemetry.io/collector/component/componentstatus v0.119.0 go.opentelemetry.io/collector/component/componenttest v0.119.0 go.opentelemetry.io/collector/config/configauth v0.119.0 @@ -16,6 +17,7 @@ require ( go.opentelemetry.io/collector/config/confignet v1.25.0 go.opentelemetry.io/collector/config/configtls v1.25.0 go.opentelemetry.io/collector/confmap v1.25.0 + go.opentelemetry.io/collector/confmap/xconfmap v0.0.0-20250205001856-68ff067415c1 go.opentelemetry.io/collector/consumer v1.25.0 go.opentelemetry.io/collector/consumer/consumererror v0.119.0 go.opentelemetry.io/collector/consumer/consumertest v0.119.0 @@ -27,11 +29,13 @@ require ( go.opentelemetry.io/collector/receiver v0.119.0 go.opentelemetry.io/collector/receiver/receivertest v0.119.0 go.opentelemetry.io/collector/receiver/xreceiver v0.119.0 + go.opentelemetry.io/otel v1.34.0 + go.opentelemetry.io/otel/sdk/metric v1.34.0 go.uber.org/goleak v1.3.0 go.uber.org/zap v1.27.0 google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f google.golang.org/grpc v1.70.0 - google.golang.org/protobuf v1.36.4 + google.golang.org/protobuf v1.36.5 ) require ( @@ -59,16 +63,13 @@ require ( go.opentelemetry.io/collector/client v1.25.0 // indirect go.opentelemetry.io/collector/config/configcompression v1.25.0 // indirect go.opentelemetry.io/collector/config/configopaque v1.25.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/extension v0.119.0 // indirect go.opentelemetry.io/collector/extension/auth v0.119.0 // indirect go.opentelemetry.io/collector/pipeline v0.119.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect - go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect go.opentelemetry.io/otel/sdk v1.34.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.34.0 // indirect go.opentelemetry.io/otel/trace v1.34.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/net v0.34.0 // indirect @@ -95,12 +96,12 @@ replace go.opentelemetry.io/collector/config/confignet => ../../config/confignet replace go.opentelemetry.io/collector/config/configopaque => ../../config/configopaque -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/config/configtls => ../../config/configtls replace go.opentelemetry.io/collector/confmap => ../../confmap +replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap + replace go.opentelemetry.io/collector/extension => ../../extension replace go.opentelemetry.io/collector/extension/auth => ../../extension/auth @@ -121,6 +122,8 @@ replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/co replace go.opentelemetry.io/collector/client => ../../client +replace go.opentelemetry.io/collector/component/componentattribute => ../../component/componentattribute + replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus replace go.opentelemetry.io/collector/receiver/xreceiver => ../xreceiver diff --git a/receiver/otlpreceiver/go.sum b/receiver/otlpreceiver/go.sum index f539c5a3a79..6397d9de0e3 100644 --- a/receiver/otlpreceiver/go.sum +++ b/receiver/otlpreceiver/go.sum @@ -121,8 +121,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/receiver/otlpreceiver/otlp.go b/receiver/otlpreceiver/otlp.go index 0f8d3c66378..9496d70912a 100644 --- a/receiver/otlpreceiver/otlp.go +++ b/receiver/otlpreceiver/otlp.go @@ -14,6 +14,7 @@ import ( "google.golang.org/grpc" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componentattribute" "go.opentelemetry.io/collector/component/componentstatus" "go.opentelemetry.io/collector/config/confighttp" "go.opentelemetry.io/collector/consumer" @@ -52,6 +53,8 @@ type otlpReceiver struct { // responsibility to invoke the respective Start*Reception methods as well // as the various Stop*Reception methods to end it. func newOtlpReceiver(cfg *Config, set *receiver.Settings) (*otlpReceiver, error) { + set.Logger = set.TelemetrySettings.LoggerWithout(componentattribute.SignalKey) + set.Logger.Debug("created signal-agnostic logger") r := &otlpReceiver{ cfg: cfg, nextTraces: nil, diff --git a/receiver/otlpreceiver/otlp_test.go b/receiver/otlpreceiver/otlp_test.go index a928895a1b6..a746688aa0c 100644 --- a/receiver/otlpreceiver/otlp_test.go +++ b/receiver/otlpreceiver/otlp_test.go @@ -21,6 +21,9 @@ import ( "github.com/klauspost/compress/zstd" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/sdk/metric/metricdata" + "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest" spb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/grpc" "google.golang.org/grpc/codes" @@ -592,7 +595,7 @@ func TestOTLPReceiverGRPCTracesIngestTest(t *testing.T) { require.Len(t, sink.AllTraces(), expectedReceivedBatches) - require.NoError(t, tt.CheckReceiverTraces("grpc", int64(expectedReceivedBatches), int64(expectedIngestionBlockedRPCs))) + assertReceiverTraces(t, tt, otlpReceiverID, "grpc", int64(expectedReceivedBatches), int64(expectedIngestionBlockedRPCs)) } // TestOTLPReceiverHTTPTracesIngestTest checks that the HTTP trace receiver @@ -680,7 +683,7 @@ func TestOTLPReceiverHTTPTracesIngestTest(t *testing.T) { require.Len(t, sink.AllTraces(), expectedReceivedBatches) - require.NoError(t, tt.CheckReceiverTraces("http", int64(expectedReceivedBatches), int64(expectedIngestionBlockedRPCs))) + assertReceiverTraces(t, tt, otlpReceiverID, "http", int64(expectedReceivedBatches), int64(expectedIngestionBlockedRPCs)) } func TestGRPCInvalidTLSCredentials(t *testing.T) { @@ -1231,3 +1234,47 @@ func (esc *errOrSinkConsumer) checkData(t *testing.T, data any, dataLen int) { } } } + +func assertReceiverTraces(t *testing.T, tt componenttest.TestTelemetry, id component.ID, transport string, accepted, refused int64) { + got, err := tt.GetMetric("otelcol_receiver_accepted_spans") + require.NoError(t, err) + metricdatatest.AssertEqual(t, + metricdata.Metrics{ + Name: "otelcol_receiver_accepted_spans", + Description: "Number of spans successfully pushed into the pipeline. [alpha]", + Unit: "{spans}", + Data: metricdata.Sum[int64]{ + Temporality: metricdata.CumulativeTemporality, + IsMonotonic: true, + DataPoints: []metricdata.DataPoint[int64]{ + { + Attributes: attribute.NewSet( + attribute.String("receiver", id.String()), + attribute.String("transport", transport)), + Value: accepted, + }, + }, + }, + }, got, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreExemplars()) + + got, err = tt.GetMetric("otelcol_receiver_refused_spans") + require.NoError(t, err) + metricdatatest.AssertEqual(t, + metricdata.Metrics{ + Name: "otelcol_receiver_refused_spans", + Description: "Number of spans that could not be pushed into the pipeline. [alpha]", + Unit: "{spans}", + Data: metricdata.Sum[int64]{ + Temporality: metricdata.CumulativeTemporality, + IsMonotonic: true, + DataPoints: []metricdata.DataPoint[int64]{ + { + Attributes: attribute.NewSet( + attribute.String("receiver", id.String()), + attribute.String("transport", transport)), + Value: refused, + }, + }, + }, + }, got, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreExemplars()) +} diff --git a/receiver/receiverhelper/internal/metadatatest/generated_telemetrytest.go b/receiver/receiverhelper/internal/metadatatest/generated_telemetrytest.go index b234cc79d47..b9f7d09e694 100644 --- a/receiver/receiverhelper/internal/metadatatest/generated_telemetrytest.go +++ b/receiver/receiverhelper/internal/metadatatest/generated_telemetrytest.go @@ -3,7 +3,6 @@ package metadatatest import ( - "context" "testing" "github.com/stretchr/testify/require" @@ -16,21 +15,6 @@ import ( "go.opentelemetry.io/collector/receiver/receivertest" ) -// Deprecated: [v0.119.0] Use componenttest.Telemetry -type Telemetry struct { - *componenttest.Telemetry -} - -// Deprecated: [v0.119.0] Use componenttest.NewTelemetry -func SetupTelemetry(opts ...componenttest.TelemetryOption) Telemetry { - return Telemetry{Telemetry: componenttest.NewTelemetry(opts...)} -} - -// Deprecated: [v0.119.0] Use metadatatest.NewSettings -func (tt *Telemetry) NewSettings() receiver.Settings { - return NewSettings(tt.Telemetry) -} - func NewSettings(tt *componenttest.Telemetry) receiver.Settings { set := receivertest.NewNopSettings() set.ID = component.NewID(component.MustNewType("receiverhelper")) @@ -38,20 +22,6 @@ func NewSettings(tt *componenttest.Telemetry) receiver.Settings { return set } -// Deprecated: [v0.119.0] Use metadatatest.AssertEqual* -func (tt *Telemetry) AssertMetrics(t *testing.T, expected []metricdata.Metrics, opts ...metricdatatest.Option) { - var md metricdata.ResourceMetrics - require.NoError(t, tt.Reader.Collect(context.Background(), &md)) - // ensure all required metrics are present - for _, want := range expected { - got := getMetricFromResource(want.Name, md) - metricdatatest.AssertEqual(t, want, got, opts...) - } - - // ensure no additional metrics are emitted - require.Equal(t, len(expected), lenMetrics(md)) -} - func AssertEqualReceiverAcceptedLogRecords(t *testing.T, tt *componenttest.Telemetry, dps []metricdata.DataPoint[int64], opts ...metricdatatest.Option) { want := metricdata.Metrics{ Name: "otelcol_receiver_accepted_log_records", diff --git a/receiver/receiverhelper/internal/metadatatest/generated_telemetrytest_test.go b/receiver/receiverhelper/internal/metadatatest/generated_telemetrytest_test.go index f7691662e63..05d2b3a669d 100644 --- a/receiver/receiverhelper/internal/metadatatest/generated_telemetrytest_test.go +++ b/receiver/receiverhelper/internal/metadatatest/generated_telemetrytest_test.go @@ -10,11 +10,12 @@ import ( "go.opentelemetry.io/otel/sdk/metric/metricdata" "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest" + "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/receiver/receiverhelper/internal/metadata" ) func TestSetupTelemetry(t *testing.T) { - testTel := SetupTelemetry() + testTel := componenttest.NewTelemetry() tb, err := metadata.NewTelemetryBuilder(testTel.NewTelemetrySettings()) require.NoError(t, err) defer tb.Shutdown() @@ -24,97 +25,22 @@ func TestSetupTelemetry(t *testing.T) { tb.ReceiverRefusedLogRecords.Add(context.Background(), 1) tb.ReceiverRefusedMetricPoints.Add(context.Background(), 1) tb.ReceiverRefusedSpans.Add(context.Background(), 1) - - testTel.AssertMetrics(t, []metricdata.Metrics{ - { - Name: "otelcol_receiver_accepted_log_records", - Description: "Number of log records successfully pushed into the pipeline. [alpha]", - Unit: "{records}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_receiver_accepted_metric_points", - Description: "Number of metric points successfully pushed into the pipeline. [alpha]", - Unit: "{datapoints}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_receiver_accepted_spans", - Description: "Number of spans successfully pushed into the pipeline. [alpha]", - Unit: "{spans}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_receiver_refused_log_records", - Description: "Number of log records that could not be pushed into the pipeline. [alpha]", - Unit: "{records}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_receiver_refused_metric_points", - Description: "Number of metric points that could not be pushed into the pipeline. [alpha]", - Unit: "{datapoints}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_receiver_refused_spans", - Description: "Number of spans that could not be pushed into the pipeline. [alpha]", - Unit: "{spans}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreValue()) - AssertEqualReceiverAcceptedLogRecords(t, testTel.Telemetry, + AssertEqualReceiverAcceptedLogRecords(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualReceiverAcceptedMetricPoints(t, testTel.Telemetry, + AssertEqualReceiverAcceptedMetricPoints(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualReceiverAcceptedSpans(t, testTel.Telemetry, + AssertEqualReceiverAcceptedSpans(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualReceiverRefusedLogRecords(t, testTel.Telemetry, + AssertEqualReceiverRefusedLogRecords(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualReceiverRefusedMetricPoints(t, testTel.Telemetry, + AssertEqualReceiverRefusedMetricPoints(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualReceiverRefusedSpans(t, testTel.Telemetry, + AssertEqualReceiverRefusedSpans(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) diff --git a/receiver/receiverhelper/obsreport_test.go b/receiver/receiverhelper/obsreport_test.go index 02ffc5943ac..e3d23dfaef5 100644 --- a/receiver/receiverhelper/obsreport_test.go +++ b/receiver/receiverhelper/obsreport_test.go @@ -81,7 +81,25 @@ func TestReceiveTraceDataOp(t *testing.T) { t.Fatalf("unexpected param: %v", params[i]) } } - require.NoError(t, tt.CheckReceiverTraces(transport, int64(acceptedSpans), int64(refusedSpans))) + + metadatatest.AssertEqualReceiverAcceptedSpans(t, tt.Telemetry, + []metricdata.DataPoint[int64]{ + { + Attributes: attribute.NewSet( + attribute.String(internal.ReceiverKey, receiverID.String()), + attribute.String(internal.TransportKey, transport)), + Value: int64(acceptedSpans), + }, + }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreExemplars()) + metadatatest.AssertEqualReceiverRefusedSpans(t, tt.Telemetry, + []metricdata.DataPoint[int64]{ + { + Attributes: attribute.NewSet( + attribute.String(internal.ReceiverKey, receiverID.String()), + attribute.String(internal.TransportKey, transport)), + Value: int64(refusedSpans), + }, + }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreExemplars()) }) } @@ -133,8 +151,8 @@ func TestReceiveLogsOp(t *testing.T) { []metricdata.DataPoint[int64]{ { Attributes: attribute.NewSet( - attribute.String("receiver", receiverID.String()), - attribute.String("transport", transport)), + attribute.String(internal.ReceiverKey, receiverID.String()), + attribute.String(internal.TransportKey, transport)), Value: int64(acceptedLogRecords), }, }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreExemplars()) @@ -142,8 +160,8 @@ func TestReceiveLogsOp(t *testing.T) { []metricdata.DataPoint[int64]{ { Attributes: attribute.NewSet( - attribute.String("receiver", receiverID.String()), - attribute.String("transport", transport)), + attribute.String(internal.ReceiverKey, receiverID.String()), + attribute.String(internal.TransportKey, transport)), Value: int64(refusedLogRecords), }, }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreExemplars()) @@ -268,10 +286,24 @@ func TestCheckReceiverTracesViews(t *testing.T) { require.NotNil(t, ctx) rec.EndTracesOp(ctx, format, 7, nil) - require.NoError(t, tt.CheckReceiverTraces(transport, 7, 0)) - require.Error(t, tt.CheckReceiverTraces(transport, 7, 7)) - require.Error(t, tt.CheckReceiverTraces(transport, 0, 0)) - assert.Error(t, tt.CheckReceiverTraces(transport, 0, 7)) + metadatatest.AssertEqualReceiverAcceptedSpans(t, tt.Telemetry, + []metricdata.DataPoint[int64]{ + { + Attributes: attribute.NewSet( + attribute.String(internal.ReceiverKey, receiverID.String()), + attribute.String(internal.TransportKey, transport)), + Value: int64(7), + }, + }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreExemplars()) + metadatatest.AssertEqualReceiverRefusedSpans(t, tt.Telemetry, + []metricdata.DataPoint[int64]{ + { + Attributes: attribute.NewSet( + attribute.String(internal.ReceiverKey, receiverID.String()), + attribute.String(internal.TransportKey, transport)), + Value: int64(0), + }, + }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreExemplars()) } func TestCheckReceiverMetricsViews(t *testing.T) { @@ -314,8 +346,8 @@ func TestCheckReceiverLogsViews(t *testing.T) { []metricdata.DataPoint[int64]{ { Attributes: attribute.NewSet( - attribute.String("receiver", receiverID.String()), - attribute.String("transport", transport)), + attribute.String(internal.ReceiverKey, receiverID.String()), + attribute.String(internal.TransportKey, transport)), Value: int64(7), }, }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreExemplars()) @@ -323,8 +355,8 @@ func TestCheckReceiverLogsViews(t *testing.T) { []metricdata.DataPoint[int64]{ { Attributes: attribute.NewSet( - attribute.String("receiver", receiverID.String()), - attribute.String("transport", transport)), + attribute.String(internal.ReceiverKey, receiverID.String()), + attribute.String(internal.TransportKey, transport)), Value: int64(0), }, }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreExemplars()) diff --git a/receiver/receivertest/go.mod b/receiver/receivertest/go.mod index f46147e8809..9fa28935d1c 100644 --- a/receiver/receivertest/go.mod +++ b/receiver/receivertest/go.mod @@ -28,7 +28,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.119.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect @@ -42,7 +41,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -56,8 +55,6 @@ replace go.opentelemetry.io/collector/component => ../../component replace go.opentelemetry.io/collector/component/componenttest => ../../component/componenttest -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/receiver/xreceiver => ../xreceiver replace go.opentelemetry.io/collector/consumer/xconsumer => ../../consumer/xconsumer diff --git a/receiver/receivertest/go.sum b/receiver/receivertest/go.sum index d4734044891..c4987361a75 100644 --- a/receiver/receivertest/go.sum +++ b/receiver/receivertest/go.sum @@ -91,8 +91,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/receiver/xreceiver/go.mod b/receiver/xreceiver/go.mod index 7ea3aa34e76..6c8911909d4 100644 --- a/receiver/xreceiver/go.mod +++ b/receiver/xreceiver/go.mod @@ -18,7 +18,6 @@ require ( 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.119.0 // indirect go.opentelemetry.io/collector/consumer v1.25.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.119.0 // indirect @@ -32,7 +31,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -46,8 +45,6 @@ replace go.opentelemetry.io/collector/component/componenttest => ../../component replace go.opentelemetry.io/collector/consumer/xconsumer => ../../consumer/xconsumer -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile diff --git a/receiver/xreceiver/go.sum b/receiver/xreceiver/go.sum index 19674bfc86e..d0f00ae46b4 100644 --- a/receiver/xreceiver/go.sum +++ b/receiver/xreceiver/go.sum @@ -90,8 +90,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/receiver/xreceiver/metadata.yaml b/receiver/xreceiver/metadata.yaml new file mode 100644 index 00000000000..ac1b25b161b --- /dev/null +++ b/receiver/xreceiver/metadata.yaml @@ -0,0 +1,10 @@ +type: xreceiver + +status: + class: receiver + codeowners: + active: + - mx-psi + - dmathieu + stability: + development: [profiles] diff --git a/reports/distributions/contrib.yaml b/reports/distributions/contrib.yaml new file mode 100644 index 00000000000..975550e1bdb --- /dev/null +++ b/reports/distributions/contrib.yaml @@ -0,0 +1,21 @@ +name: contrib +url: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib +maintainers: [] +components: + connector: + - forward + exporter: + - debug + - nop + - otlp + - otlphttp + extension: + - zpages + pkg: + - service + processor: + - batch + - memory_limiter + receiver: + - nop + - otlp diff --git a/reports/distributions/core.yaml b/reports/distributions/core.yaml new file mode 100644 index 00000000000..109424b7dec --- /dev/null +++ b/reports/distributions/core.yaml @@ -0,0 +1,21 @@ +name: core +url: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol +maintainers: [] +components: + connector: + - forward + exporter: + - debug + - nop + - otlp + - otlphttp + extension: + - zpages + pkg: + - service + processor: + - batch + - memory_limiter + receiver: + - nop + - otlp diff --git a/reports/distributions/k8s.yaml b/reports/distributions/k8s.yaml new file mode 100644 index 00000000000..7b784401244 --- /dev/null +++ b/reports/distributions/k8s.yaml @@ -0,0 +1,18 @@ +name: k8s +url: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-k8s +maintainers: [] +components: + connector: + - forward + exporter: + - debug + - nop + - otlp + - otlphttp + extension: + - zpages + processor: + - batch + - memory_limiter + receiver: + - otlp diff --git a/reports/distributions/otlp.yaml b/reports/distributions/otlp.yaml new file mode 100644 index 00000000000..1f62a8063d6 --- /dev/null +++ b/reports/distributions/otlp.yaml @@ -0,0 +1,9 @@ +name: otlp +url: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-otlp +maintainers: [] +components: + exporter: + - otlp + - otlphttp + receiver: + - otlp diff --git a/scraper/go.mod b/scraper/go.mod index 45cf44e6b3d..8eef74740e6 100644 --- a/scraper/go.mod +++ b/scraper/go.mod @@ -23,7 +23,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect go.opentelemetry.io/otel/sdk v1.34.0 // indirect @@ -35,12 +34,10 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) -replace go.opentelemetry.io/collector/config/configtelemetry => ../config/configtelemetry - replace go.opentelemetry.io/collector/pipeline => ../pipeline replace go.opentelemetry.io/collector/pdata => ../pdata diff --git a/scraper/go.sum b/scraper/go.sum index d4734044891..c4987361a75 100644 --- a/scraper/go.sum +++ b/scraper/go.sum @@ -91,8 +91,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/scraper/scraperhelper/go.mod b/scraper/scraperhelper/go.mod index 8e6c4f5c7f5..ead8d6650e9 100644 --- a/scraper/scraperhelper/go.mod +++ b/scraper/scraperhelper/go.mod @@ -35,7 +35,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/consumer/consumererror v0.119.0 // indirect go.opentelemetry.io/collector/consumer/xconsumer v0.119.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.119.0 // indirect @@ -45,7 +44,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -55,8 +54,6 @@ replace go.opentelemetry.io/collector/receiver => ../../receiver replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/consumer/consumererror => ../../consumer/consumererror replace go.opentelemetry.io/collector/receiver/receivertest => ../../receiver/receivertest diff --git a/scraper/scraperhelper/go.sum b/scraper/scraperhelper/go.sum index d4734044891..c4987361a75 100644 --- a/scraper/scraperhelper/go.sum +++ b/scraper/scraperhelper/go.sum @@ -91,8 +91,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/scraper/scraperhelper/internal/metadatatest/generated_telemetrytest.go b/scraper/scraperhelper/internal/metadatatest/generated_telemetrytest.go index f015a380c03..0348f4b0641 100644 --- a/scraper/scraperhelper/internal/metadatatest/generated_telemetrytest.go +++ b/scraper/scraperhelper/internal/metadatatest/generated_telemetrytest.go @@ -3,7 +3,6 @@ package metadatatest import ( - "context" "testing" "github.com/stretchr/testify/require" @@ -13,30 +12,6 @@ import ( "go.opentelemetry.io/collector/component/componenttest" ) -// Deprecated: [v0.119.0] Use componenttest.Telemetry -type Telemetry struct { - *componenttest.Telemetry -} - -// Deprecated: [v0.119.0] Use componenttest.NewTelemetry -func SetupTelemetry(opts ...componenttest.TelemetryOption) Telemetry { - return Telemetry{Telemetry: componenttest.NewTelemetry(opts...)} -} - -// Deprecated: [v0.119.0] Use metadatatest.AssertEqual* -func (tt *Telemetry) AssertMetrics(t *testing.T, expected []metricdata.Metrics, opts ...metricdatatest.Option) { - var md metricdata.ResourceMetrics - require.NoError(t, tt.Reader.Collect(context.Background(), &md)) - // ensure all required metrics are present - for _, want := range expected { - got := getMetricFromResource(want.Name, md) - metricdatatest.AssertEqual(t, want, got, opts...) - } - - // ensure no additional metrics are emitted - require.Equal(t, len(expected), lenMetrics(md)) -} - func AssertEqualScraperErroredLogRecords(t *testing.T, tt *componenttest.Telemetry, dps []metricdata.DataPoint[int64], opts ...metricdatatest.Option) { want := metricdata.Metrics{ Name: "otelcol_scraper_errored_log_records", diff --git a/scraper/scraperhelper/internal/metadatatest/generated_telemetrytest_test.go b/scraper/scraperhelper/internal/metadatatest/generated_telemetrytest_test.go index 4432376c25e..da21c64fc19 100644 --- a/scraper/scraperhelper/internal/metadatatest/generated_telemetrytest_test.go +++ b/scraper/scraperhelper/internal/metadatatest/generated_telemetrytest_test.go @@ -10,11 +10,12 @@ import ( "go.opentelemetry.io/otel/sdk/metric/metricdata" "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest" + "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/scraper/scraperhelper/internal/metadata" ) func TestSetupTelemetry(t *testing.T) { - testTel := SetupTelemetry() + testTel := componenttest.NewTelemetry() tb, err := metadata.NewTelemetryBuilder(testTel.NewTelemetrySettings()) require.NoError(t, err) defer tb.Shutdown() @@ -22,67 +23,16 @@ func TestSetupTelemetry(t *testing.T) { tb.ScraperErroredMetricPoints.Add(context.Background(), 1) tb.ScraperScrapedLogRecords.Add(context.Background(), 1) tb.ScraperScrapedMetricPoints.Add(context.Background(), 1) - - testTel.AssertMetrics(t, []metricdata.Metrics{ - { - Name: "otelcol_scraper_errored_log_records", - Description: "Number of log records that were unable to be scraped. [alpha]", - Unit: "{datapoints}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_scraper_errored_metric_points", - Description: "Number of metric points that were unable to be scraped. [alpha]", - Unit: "{datapoints}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_scraper_scraped_log_records", - Description: "Number of log records successfully scraped. [alpha]", - Unit: "{datapoints}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_scraper_scraped_metric_points", - Description: "Number of metric points successfully scraped. [alpha]", - Unit: "{datapoints}", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreValue()) - AssertEqualScraperErroredLogRecords(t, testTel.Telemetry, + AssertEqualScraperErroredLogRecords(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualScraperErroredMetricPoints(t, testTel.Telemetry, + AssertEqualScraperErroredMetricPoints(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualScraperScrapedLogRecords(t, testTel.Telemetry, + AssertEqualScraperScrapedLogRecords(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualScraperScrapedMetricPoints(t, testTel.Telemetry, + AssertEqualScraperScrapedMetricPoints(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) diff --git a/scraper/scrapertest/go.mod b/scraper/scrapertest/go.mod index e1d9ab058ec..76727327ea2 100644 --- a/scraper/scrapertest/go.mod +++ b/scraper/scrapertest/go.mod @@ -17,7 +17,6 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.119.0 // indirect go.opentelemetry.io/collector/pdata v1.25.0 // indirect go.opentelemetry.io/collector/pipeline v0.119.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect @@ -32,7 +31,7 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect ) replace go.opentelemetry.io/collector/component/componenttest => ../../component/componenttest @@ -43,6 +42,4 @@ replace go.opentelemetry.io/collector/pipeline => ../../pipeline replace go.opentelemetry.io/collector/pdata => ../../pdata -replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry - replace go.opentelemetry.io/collector/scraper => ../ diff --git a/scraper/scrapertest/go.sum b/scraper/scrapertest/go.sum index fe8cdaf80bc..003372bb2c4 100644 --- a/scraper/scrapertest/go.sum +++ b/scraper/scrapertest/go.sum @@ -85,7 +85,7 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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/service/config_test.go b/service/config_test.go index 8ce13a7ec33..0032ac5d7eb 100644 --- a/service/config_test.go +++ b/service/config_test.go @@ -13,6 +13,7 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/config/configtelemetry" + "go.opentelemetry.io/collector/confmap/xconfmap" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/service/extensions" "go.opentelemetry.io/collector/service/pipelines" @@ -77,7 +78,7 @@ func TestConfigValidate(t *testing.T) { for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { cfg := tt.cfgFn() - err := component.ValidateConfig(cfg) + err := xconfmap.Validate(cfg) if tt.expected != nil { assert.ErrorContains(t, err, tt.expected.Error()) } else { diff --git a/service/extensions/extensions.go b/service/extensions/extensions.go index fcefcb33f20..9dba0ed82f5 100644 --- a/service/extensions/extensions.go +++ b/service/extensions/extensions.go @@ -13,12 +13,13 @@ import ( "go.uber.org/zap" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componentattribute" "go.opentelemetry.io/collector/component/componentstatus" "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/extension" "go.opentelemetry.io/collector/extension/extensioncapabilities" + "go.opentelemetry.io/collector/service/internal/attribute" "go.opentelemetry.io/collector/service/internal/builders" - "go.opentelemetry.io/collector/service/internal/components" "go.opentelemetry.io/collector/service/internal/status" "go.opentelemetry.io/collector/service/internal/zpages" ) @@ -38,7 +39,8 @@ type Extensions struct { func (bes *Extensions) Start(ctx context.Context, host component.Host) error { bes.telemetry.Logger.Info("Starting extensions...") for _, extID := range bes.extensionIDs { - extLogger := components.ExtensionLogger(bes.telemetry.Logger, extID) + extLogger := componentattribute.NewLogger( + bes.telemetry.Logger, attribute.Extension(extID).Set()) extLogger.Info("Extension is starting...") instanceID := bes.instanceIDs[extID] ext := bes.extMap[extID] @@ -170,9 +172,8 @@ func (bes *Extensions) HandleZPages(w http.ResponseWriter, r *http.Request) { // Settings holds configuration for building Extensions. type Settings struct { - Telemetry component.TelemetrySettings - BuildInfo component.BuildInfo - ModuleInfo extension.ModuleInfo + Telemetry component.TelemetrySettings + BuildInfo component.BuildInfo // Extensions builder for extensions. Extensions builders.Extension @@ -214,9 +215,9 @@ func New(ctx context.Context, set Settings, cfg Config, options ...Option) (*Ext ID: extID, TelemetrySettings: set.Telemetry, BuildInfo: set.BuildInfo, - ModuleInfo: set.ModuleInfo, } - extSet.TelemetrySettings.Logger = components.ExtensionLogger(set.Telemetry.Logger, extID) + extSet.TelemetrySettings.Logger = componentattribute.NewLogger( + extSet.TelemetrySettings.Logger, attribute.Extension(extID).Set()) ext, err := set.Extensions.Create(ctx, extSet) if err != nil { diff --git a/service/go.mod b/service/go.mod index d706b1de331..138e190d4bc 100644 --- a/service/go.mod +++ b/service/go.mod @@ -10,11 +10,13 @@ require ( github.com/stretchr/testify v1.10.0 go.opentelemetry.io/collector v0.119.0 go.opentelemetry.io/collector/component v0.119.0 + go.opentelemetry.io/collector/component/componentattribute v0.119.0 go.opentelemetry.io/collector/component/componentstatus v0.119.0 go.opentelemetry.io/collector/component/componenttest v0.119.0 go.opentelemetry.io/collector/config/confighttp v0.119.0 go.opentelemetry.io/collector/config/configtelemetry v0.119.0 go.opentelemetry.io/collector/confmap v1.25.0 + go.opentelemetry.io/collector/confmap/xconfmap v0.0.0-20250205001856-68ff067415c1 go.opentelemetry.io/collector/connector v0.119.0 go.opentelemetry.io/collector/connector/connectortest v0.119.0 go.opentelemetry.io/collector/connector/xconnector v0.119.0 @@ -122,7 +124,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/grpc v1.70.0 // indirect - google.golang.org/protobuf v1.36.4 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -136,6 +138,8 @@ replace go.opentelemetry.io/collector/component => ../component replace go.opentelemetry.io/collector/component/componenttest => ../component/componenttest +replace go.opentelemetry.io/collector/component/componentattribute => ../component/componentattribute + replace go.opentelemetry.io/collector/component/componentstatus => ../component/componentstatus replace go.opentelemetry.io/collector/pdata => ../pdata @@ -150,6 +154,8 @@ replace go.opentelemetry.io/collector/exporter => ../exporter replace go.opentelemetry.io/collector/confmap => ../confmap +replace go.opentelemetry.io/collector/confmap/xconfmap => ../confmap/xconfmap + replace go.opentelemetry.io/collector/config/configtelemetry => ../config/configtelemetry replace go.opentelemetry.io/collector/pipeline => ../pipeline diff --git a/service/go.sum b/service/go.sum index ce6db75c8b7..9a1535863ec 100644 --- a/service/go.sum +++ b/service/go.sum @@ -202,8 +202,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= diff --git a/service/internal/attribute/attribute.go b/service/internal/attribute/attribute.go index 7bfdf217961..0dcd0cfc35b 100644 --- a/service/internal/attribute/attribute.go +++ b/service/internal/attribute/attribute.go @@ -9,16 +9,11 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componentattribute" "go.opentelemetry.io/collector/pipeline" ) const ( - componentKindKey = "otelcol.component.kind" - componentIDKey = "otelcol.component.id" - pipelineIDKey = "otelcol.pipeline.id" - signalKey = "otelcol.signal" - signalOutputKey = "otelcol.signal.output" - capabiltiesKind = "capabilities" fanoutKind = "fanout" ) @@ -28,18 +23,18 @@ type Attributes struct { id int64 } -func newAttributes(attrs ...attribute.KeyValue) *Attributes { +func newAttributes(attrs ...attribute.KeyValue) Attributes { h := fnv.New64a() for _, kv := range attrs { h.Write([]byte("(" + string(kv.Key) + "|" + kv.Value.AsString() + ")")) } - return &Attributes{ + return Attributes{ set: attribute.NewSet(attrs...), id: int64(h.Sum64()), // #nosec G115 } } -func (a Attributes) Attributes() *attribute.Set { +func (a Attributes) Set() *attribute.Set { return &a.set } @@ -47,57 +42,57 @@ func (a Attributes) ID() int64 { return a.id } -func Receiver(pipelineType pipeline.Signal, id component.ID) *Attributes { +func Receiver(pipelineType pipeline.Signal, id component.ID) Attributes { return newAttributes( - attribute.String(componentKindKey, component.KindReceiver.String()), - attribute.String(signalKey, pipelineType.String()), - attribute.String(componentIDKey, id.String()), + attribute.String(componentattribute.ComponentKindKey, component.KindReceiver.String()), + attribute.String(componentattribute.SignalKey, pipelineType.String()), + attribute.String(componentattribute.ComponentIDKey, id.String()), ) } -func Processor(pipelineID pipeline.ID, id component.ID) *Attributes { +func Processor(pipelineID pipeline.ID, id component.ID) Attributes { return newAttributes( - attribute.String(componentKindKey, component.KindProcessor.String()), - attribute.String(signalKey, pipelineID.Signal().String()), - attribute.String(pipelineIDKey, pipelineID.String()), - attribute.String(componentIDKey, id.String()), + attribute.String(componentattribute.ComponentKindKey, component.KindProcessor.String()), + attribute.String(componentattribute.SignalKey, pipelineID.Signal().String()), + attribute.String(componentattribute.PipelineIDKey, pipelineID.String()), + attribute.String(componentattribute.ComponentIDKey, id.String()), ) } -func Exporter(pipelineType pipeline.Signal, id component.ID) *Attributes { +func Exporter(pipelineType pipeline.Signal, id component.ID) Attributes { return newAttributes( - attribute.String(componentKindKey, component.KindExporter.String()), - attribute.String(signalKey, pipelineType.String()), - attribute.String(componentIDKey, id.String()), + attribute.String(componentattribute.ComponentKindKey, component.KindExporter.String()), + attribute.String(componentattribute.SignalKey, pipelineType.String()), + attribute.String(componentattribute.ComponentIDKey, id.String()), ) } -func Connector(exprPipelineType, rcvrPipelineType pipeline.Signal, id component.ID) *Attributes { +func Connector(exprPipelineType, rcvrPipelineType pipeline.Signal, id component.ID) Attributes { return newAttributes( - attribute.String(componentKindKey, component.KindConnector.String()), - attribute.String(signalKey, exprPipelineType.String()), - attribute.String(signalOutputKey, rcvrPipelineType.String()), - attribute.String(componentIDKey, id.String()), + attribute.String(componentattribute.ComponentKindKey, component.KindConnector.String()), + attribute.String(componentattribute.SignalKey, exprPipelineType.String()), + attribute.String(componentattribute.SignalOutputKey, rcvrPipelineType.String()), + attribute.String(componentattribute.ComponentIDKey, id.String()), ) } -func Capabilities(pipelineID pipeline.ID) *Attributes { +func Extension(id component.ID) Attributes { return newAttributes( - attribute.String(componentKindKey, capabiltiesKind), - attribute.String(pipelineIDKey, pipelineID.String()), + attribute.String(componentattribute.ComponentKindKey, component.KindExtension.String()), + attribute.String(componentattribute.ComponentIDKey, id.String()), ) } -func Fanout(pipelineID pipeline.ID) *Attributes { +func Capabilities(pipelineID pipeline.ID) Attributes { return newAttributes( - attribute.String(componentKindKey, fanoutKind), - attribute.String(pipelineIDKey, pipelineID.String()), + attribute.String(componentattribute.ComponentKindKey, capabiltiesKind), + attribute.String(componentattribute.PipelineIDKey, pipelineID.String()), ) } -func Extension(id component.ID) *Attributes { +func Fanout(pipelineID pipeline.ID) Attributes { return newAttributes( - attribute.String(componentKindKey, component.KindExtension.String()), - attribute.String(componentIDKey, id.String()), + attribute.String(componentattribute.ComponentKindKey, fanoutKind), + attribute.String(componentattribute.PipelineIDKey, pipelineID.String()), ) } diff --git a/service/internal/attribute/attribute_test.go b/service/internal/attribute/attribute_test.go index 6025f77a20b..eb8eb6ea594 100644 --- a/service/internal/attribute/attribute_test.go +++ b/service/internal/attribute/attribute_test.go @@ -1,7 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -package attribute +package attribute_test import ( "testing" @@ -9,8 +9,10 @@ import ( "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componentattribute" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/pipeline/xpipeline" + "go.opentelemetry.io/collector/service/internal/attribute" ) var ( @@ -42,16 +44,16 @@ var ( func TestReceiver(t *testing.T) { for _, sig := range signals { for _, id := range cIDs { - r := Receiver(sig, id) - componentKind, ok := r.Attributes().Value(componentKindKey) + r := attribute.Receiver(sig, id) + componentKind, ok := r.Set().Value(componentattribute.ComponentKindKey) require.True(t, ok) require.Equal(t, component.KindReceiver.String(), componentKind.AsString()) - signal, ok := r.Attributes().Value(signalKey) + signal, ok := r.Set().Value(componentattribute.SignalKey) require.True(t, ok) require.Equal(t, sig.String(), signal.AsString()) - componentID, ok := r.Attributes().Value(componentIDKey) + componentID, ok := r.Set().Value(componentattribute.ComponentIDKey) require.True(t, ok) require.Equal(t, id.String(), componentID.AsString()) } @@ -61,16 +63,16 @@ func TestReceiver(t *testing.T) { func TestProcessor(t *testing.T) { for _, pID := range pIDs { for _, id := range cIDs { - p := Processor(pID, id) - componentKind, ok := p.Attributes().Value(componentKindKey) + p := attribute.Processor(pID, id) + componentKind, ok := p.Set().Value(componentattribute.ComponentKindKey) require.True(t, ok) require.Equal(t, component.KindProcessor.String(), componentKind.AsString()) - pipelineID, ok := p.Attributes().Value(pipelineIDKey) + pipelineID, ok := p.Set().Value(componentattribute.PipelineIDKey) require.True(t, ok) require.Equal(t, pID.String(), pipelineID.AsString()) - componentID, ok := p.Attributes().Value(componentIDKey) + componentID, ok := p.Set().Value(componentattribute.ComponentIDKey) require.True(t, ok) require.Equal(t, id.String(), componentID.AsString()) } @@ -80,16 +82,16 @@ func TestProcessor(t *testing.T) { func TestExporter(t *testing.T) { for _, sig := range signals { for _, id := range cIDs { - e := Exporter(sig, id) - componentKind, ok := e.Attributes().Value(componentKindKey) + e := attribute.Exporter(sig, id) + componentKind, ok := e.Set().Value(componentattribute.ComponentKindKey) require.True(t, ok) require.Equal(t, component.KindExporter.String(), componentKind.AsString()) - signal, ok := e.Attributes().Value(signalKey) + signal, ok := e.Set().Value(componentattribute.SignalKey) require.True(t, ok) require.Equal(t, sig.String(), signal.AsString()) - componentID, ok := e.Attributes().Value(componentIDKey) + componentID, ok := e.Set().Value(componentattribute.ComponentIDKey) require.True(t, ok) require.Equal(t, id.String(), componentID.AsString()) } @@ -100,20 +102,20 @@ func TestConnector(t *testing.T) { for _, exprSig := range signals { for _, rcvrSig := range signals { for _, id := range cIDs { - c := Connector(exprSig, rcvrSig, id) - componentKind, ok := c.Attributes().Value(componentKindKey) + c := attribute.Connector(exprSig, rcvrSig, id) + componentKind, ok := c.Set().Value(componentattribute.ComponentKindKey) require.True(t, ok) require.Equal(t, component.KindConnector.String(), componentKind.AsString()) - signal, ok := c.Attributes().Value(signalKey) + signal, ok := c.Set().Value(componentattribute.SignalKey) require.True(t, ok) require.Equal(t, exprSig.String(), signal.AsString()) - signalOutput, ok := c.Attributes().Value(signalOutputKey) + signalOutput, ok := c.Set().Value(componentattribute.SignalOutputKey) require.True(t, ok) require.Equal(t, rcvrSig.String(), signalOutput.AsString()) - componentID, ok := c.Attributes().Value(componentIDKey) + componentID, ok := c.Set().Value(componentattribute.ComponentIDKey) require.True(t, ok) require.Equal(t, id.String(), componentID.AsString()) } @@ -122,8 +124,8 @@ func TestConnector(t *testing.T) { } func TestExtension(t *testing.T) { - e := Extension(component.MustNewID("foo")) - componentKind, ok := e.Attributes().Value(componentKindKey) + e := attribute.Extension(component.MustNewID("foo")) + componentKind, ok := e.Set().Value(componentattribute.ComponentKindKey) require.True(t, ok) require.Equal(t, component.KindExtension.String(), componentKind.AsString()) } @@ -137,36 +139,38 @@ func TestSetEquality(t *testing.T) { for j, ej := range setJ { if i == j { require.Equal(t, ei.ID(), ej.ID()) - require.True(t, ei.Attributes().Equals(ej.Attributes())) + si, sj := ei.Set(), ej.Set() + require.True(t, si.Equals(sj)) } else { require.NotEqual(t, ei.ID(), ej.ID()) - require.False(t, ei.Attributes().Equals(ej.Attributes())) + si, sj := ei.Set(), ej.Set() + require.False(t, si.Equals(sj)) } } } } -func createExampleSets() []*Attributes { - sets := []*Attributes{} +func createExampleSets() []attribute.Attributes { + sets := []attribute.Attributes{} // Receiver examples. for _, sig := range signals { for _, id := range cIDs { - sets = append(sets, Receiver(sig, id)) + sets = append(sets, attribute.Receiver(sig, id)) } } // Processor examples. for _, pID := range pIDs { for _, cID := range cIDs { - sets = append(sets, Processor(pID, cID)) + sets = append(sets, attribute.Processor(pID, cID)) } } // Exporter examples. for _, sig := range signals { for _, id := range cIDs { - sets = append(sets, Exporter(sig, id)) + sets = append(sets, attribute.Exporter(sig, id)) } } @@ -174,19 +178,19 @@ func createExampleSets() []*Attributes { for _, exprSig := range signals { for _, rcvrSig := range signals { for _, id := range cIDs { - sets = append(sets, Connector(exprSig, rcvrSig, id)) + sets = append(sets, attribute.Connector(exprSig, rcvrSig, id)) } } } // Capabilities examples. for _, pID := range pIDs { - sets = append(sets, Capabilities(pID)) + sets = append(sets, attribute.Capabilities(pID)) } // Fanout examples. for _, pID := range pIDs { - sets = append(sets, Fanout(pID)) + sets = append(sets, attribute.Fanout(pID)) } return sets diff --git a/service/internal/components/loggers.go b/service/internal/components/loggers.go deleted file mode 100644 index f02d19fb082..00000000000 --- a/service/internal/components/loggers.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package components // import "go.opentelemetry.io/collector/service/internal/components" - -import ( - "strings" - - "go.uber.org/zap" - - "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/pipeline" -) - -const ( - zapKindKey = "kind" - zapNameKey = "name" - zapDataTypeKey = "data_type" - zapStabilityKey = "stability" - zapPipelineKey = "pipeline" - zapExporterInPipeline = "exporter_in_pipeline" - zapReceiverInPipeline = "receiver_in_pipeline" -) - -func ReceiverLogger(logger *zap.Logger, id component.ID, dt pipeline.Signal) *zap.Logger { - return logger.With( - zap.String(zapKindKey, strings.ToLower(component.KindReceiver.String())), - zap.String(zapNameKey, id.String()), - zap.String(zapDataTypeKey, dt.String())) -} - -func ProcessorLogger(logger *zap.Logger, id component.ID, pipelineID pipeline.ID) *zap.Logger { - return logger.With( - zap.String(zapKindKey, strings.ToLower(component.KindProcessor.String())), - zap.String(zapNameKey, id.String()), - zap.String(zapPipelineKey, pipelineID.String())) -} - -func ExporterLogger(logger *zap.Logger, id component.ID, dt pipeline.Signal) *zap.Logger { - return logger.With( - zap.String(zapKindKey, strings.ToLower(component.KindExporter.String())), - zap.String(zapDataTypeKey, dt.String()), - zap.String(zapNameKey, id.String())) -} - -func ExtensionLogger(logger *zap.Logger, id component.ID) *zap.Logger { - return logger.With( - zap.String(zapKindKey, strings.ToLower(component.KindExtension.String())), - zap.String(zapNameKey, id.String())) -} - -func ConnectorLogger(logger *zap.Logger, id component.ID, expDT, rcvDT pipeline.Signal) *zap.Logger { - return logger.With( - zap.String(zapKindKey, strings.ToLower(component.KindConnector.String())), - zap.String(zapNameKey, id.String()), - zap.String(zapExporterInPipeline, expDT.String()), - zap.String(zapReceiverInPipeline, rcvDT.String())) -} diff --git a/service/internal/components/package_test.go b/service/internal/components/package_test.go deleted file mode 100644 index 30b5a82311a..00000000000 --- a/service/internal/components/package_test.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package components - -import ( - "testing" - - "go.uber.org/goleak" -) - -func TestMain(m *testing.M) { - goleak.VerifyTestMain(m) -} diff --git a/service/internal/graph/capabilities.go b/service/internal/graph/capabilities.go index 128e6fde926..8b013ae1623 100644 --- a/service/internal/graph/capabilities.go +++ b/service/internal/graph/capabilities.go @@ -7,10 +7,9 @@ import ( "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer/xconsumer" "go.opentelemetry.io/collector/pipeline" + "go.opentelemetry.io/collector/service/internal/attribute" ) -const capabilitiesSeed = "capabilities" - var _ consumerNode = (*capabilitiesNode)(nil) // Every pipeline has a "virtual" capabilities node immediately after the receiver(s). @@ -19,7 +18,7 @@ var _ consumerNode = (*capabilitiesNode)(nil) // 2. Present a consistent "first consumer" for each pipeline. // The nodeID is derived from "pipeline ID". type capabilitiesNode struct { - nodeID + attribute.Attributes pipelineID pipeline.ID baseConsumer consumer.ConsumeTracesFunc @@ -30,7 +29,7 @@ type capabilitiesNode struct { func newCapabilitiesNode(pipelineID pipeline.ID) *capabilitiesNode { return &capabilitiesNode{ - nodeID: newNodeID(capabilitiesSeed, pipelineID.String()), + Attributes: attribute.Capabilities(pipelineID), pipelineID: pipelineID, } } diff --git a/service/internal/graph/connector.go b/service/internal/graph/connector.go index 1f654454ee6..dff3e55c480 100644 --- a/service/internal/graph/connector.go +++ b/service/internal/graph/connector.go @@ -7,25 +7,22 @@ import ( "context" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componentattribute" "go.opentelemetry.io/collector/connector" "go.opentelemetry.io/collector/connector/xconnector" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer/xconsumer" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/pipeline/xpipeline" + "go.opentelemetry.io/collector/service/internal/attribute" "go.opentelemetry.io/collector/service/internal/builders" "go.opentelemetry.io/collector/service/internal/capabilityconsumer" - "go.opentelemetry.io/collector/service/internal/components" ) -const connectorSeed = "connector" - var _ consumerNode = (*connectorNode)(nil) -// A connector instance connects one pipeline type to one other pipeline type. -// Therefore, nodeID is derived from "exporter pipeline type", "receiver pipeline type", and "component ID". type connectorNode struct { - nodeID + attribute.Attributes componentID component.ID exprPipelineType pipeline.Signal rcvrPipelineType pipeline.Signal @@ -34,7 +31,7 @@ type connectorNode struct { func newConnectorNode(exprPipelineType, rcvrPipelineType pipeline.Signal, connID component.ID) *connectorNode { return &connectorNode{ - nodeID: newNodeID(connectorSeed, connID.String(), exprPipelineType.String(), rcvrPipelineType.String()), + Attributes: attribute.Connector(exprPipelineType, rcvrPipelineType, connID), componentID: connID, exprPipelineType: exprPipelineType, rcvrPipelineType: rcvrPipelineType, @@ -52,7 +49,7 @@ func (n *connectorNode) buildComponent( builder *builders.ConnectorBuilder, nexts []baseConsumer, ) error { - tel.Logger = components.ConnectorLogger(tel.Logger, n.componentID, n.exprPipelineType, n.rcvrPipelineType) + tel.Logger = componentattribute.NewLogger(tel.Logger, n.Attributes.Set()) set := connector.Settings{ID: n.componentID, TelemetrySettings: tel, BuildInfo: info} switch n.rcvrPipelineType { case pipeline.SignalTraces: diff --git a/service/internal/graph/exporter.go b/service/internal/graph/exporter.go index ab7d0f6392b..e36536df0ec 100644 --- a/service/internal/graph/exporter.go +++ b/service/internal/graph/exporter.go @@ -8,21 +8,20 @@ import ( "fmt" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componentattribute" "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/pipeline/xpipeline" + "go.opentelemetry.io/collector/service/internal/attribute" "go.opentelemetry.io/collector/service/internal/builders" - "go.opentelemetry.io/collector/service/internal/components" ) -const exporterSeed = "exporter" - var _ consumerNode = (*exporterNode)(nil) // An exporter instance can be shared by multiple pipelines of the same type. // Therefore, nodeID is derived from "pipeline type" and "component ID". type exporterNode struct { - nodeID + attribute.Attributes componentID component.ID pipelineType pipeline.Signal component.Component @@ -30,7 +29,7 @@ type exporterNode struct { func newExporterNode(pipelineType pipeline.Signal, exprID component.ID) *exporterNode { return &exporterNode{ - nodeID: newNodeID(exporterSeed, pipelineType.String(), exprID.String()), + Attributes: attribute.Exporter(pipelineType, exprID), componentID: exprID, pipelineType: pipelineType, } @@ -46,7 +45,7 @@ func (n *exporterNode) buildComponent( info component.BuildInfo, builder *builders.ExporterBuilder, ) error { - tel.Logger = components.ExporterLogger(tel.Logger, n.componentID, n.pipelineType) + tel.Logger = componentattribute.NewLogger(tel.Logger, n.Attributes.Set()) set := exporter.Settings{ID: n.componentID, TelemetrySettings: tel, BuildInfo: info} var err error switch n.pipelineType { diff --git a/service/internal/graph/fanout.go b/service/internal/graph/fanout.go index 13c8d4ad1c5..284eb4405a5 100644 --- a/service/internal/graph/fanout.go +++ b/service/internal/graph/fanout.go @@ -5,23 +5,22 @@ package graph // import "go.opentelemetry.io/collector/service/internal/graph" import ( "go.opentelemetry.io/collector/pipeline" + "go.opentelemetry.io/collector/service/internal/attribute" ) -const fanOutToExporters = "fanout_to_exporters" - var _ consumerNode = (*fanOutNode)(nil) // Each pipeline has one fan-out node before exporters. // Therefore, nodeID is derived from "pipeline ID". type fanOutNode struct { - nodeID + attribute.Attributes pipelineID pipeline.ID baseConsumer } func newFanOutNode(pipelineID pipeline.ID) *fanOutNode { return &fanOutNode{ - nodeID: newNodeID(fanOutToExporters, pipelineID.String()), + Attributes: attribute.Fanout(pipelineID), pipelineID: pipelineID, } } diff --git a/service/internal/graph/graph_test.go b/service/internal/graph/graph_test.go index be4a98e4135..80f46c9f115 100644 --- a/service/internal/graph/graph_test.go +++ b/service/internal/graph/graph_test.go @@ -2231,11 +2231,11 @@ func TestGraphBuildErrors(t *testing.T) { }, }, expected: `cycle detected: ` + - `connector "nop/conn1" (traces to traces) -> ` + - `processor "nop" in pipeline "traces/2" -> ` + `connector "nop/conn" (traces to traces) -> ` + `processor "nop" in pipeline "traces/1" -> ` + - `connector "nop/conn1" (traces to traces)`, + `connector "nop/conn1" (traces to traces) -> ` + + `processor "nop" in pipeline "traces/2" -> ` + + `connector "nop/conn" (traces to traces)`, }, { name: "not_allowed_deep_cycle_metrics.yaml", diff --git a/service/internal/graph/host.go b/service/internal/graph/host.go index 3aaef5e055f..601cc3947f1 100644 --- a/service/internal/graph/host.go +++ b/service/internal/graph/host.go @@ -11,11 +11,11 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componentstatus" - "go.opentelemetry.io/collector/extension" "go.opentelemetry.io/collector/featuregate" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/service/extensions" "go.opentelemetry.io/collector/service/internal/builders" + "go.opentelemetry.io/collector/service/internal/moduleinfo" "go.opentelemetry.io/collector/service/internal/status" "go.opentelemetry.io/collector/service/internal/zpages" ) @@ -25,9 +25,16 @@ type getExporters interface { GetExporters() map[pipeline.Signal]map[component.ID]component.Component } +// TODO: expose GetModuleInfo as part of a service/hostcapabilities package. +type getModuleInfos interface { + // GetModuleInfo returns the module information for the host. + GetModuleInfos() moduleinfo.ModuleInfos +} + var ( _ getExporters = (*Host)(nil) _ component.Host = (*Host)(nil) + _ getModuleInfos = (*Host)(nil) ) type Host struct { @@ -38,8 +45,8 @@ type Host struct { Connectors *builders.ConnectorBuilder Extensions *builders.ExtensionBuilder - ModuleInfo extension.ModuleInfo - BuildInfo component.BuildInfo + ModuleInfos moduleinfo.ModuleInfos + BuildInfo component.BuildInfo Pipelines *Graph ServiceExtensions *extensions.Extensions @@ -67,6 +74,10 @@ func (host *Host) GetExtensions() map[component.ID]component.Component { return host.ServiceExtensions.GetExtensions() } +func (host *Host) GetModuleInfos() moduleinfo.ModuleInfos { + return host.ModuleInfos +} + // Deprecated: [0.79.0] This function will be removed in the future. // Several components in the contrib repository use this function so it cannot be removed // before those cases are removed. In most cases, use of this function can be replaced by a diff --git a/service/internal/graph/metadata.yaml b/service/internal/graph/metadata.yaml new file mode 100644 index 00000000000..957a86c6c9f --- /dev/null +++ b/service/internal/graph/metadata.yaml @@ -0,0 +1,7 @@ +type: graph + +status: + class: service + codeowners: + active: + - djaglowski diff --git a/service/internal/graph/node.go b/service/internal/graph/node.go deleted file mode 100644 index 81946a79df4..00000000000 --- a/service/internal/graph/node.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package graph // import "go.opentelemetry.io/collector/service/internal/graph" - -import ( - "hash/fnv" - "strings" -) - -type nodeID int64 - -func (n nodeID) ID() int64 { - return int64(n) -} - -func newNodeID(parts ...string) nodeID { - h := fnv.New64a() - h.Write([]byte(strings.Join(parts, "|"))) - //nolint:gosec - return nodeID(h.Sum64()) -} diff --git a/service/internal/graph/processor.go b/service/internal/graph/processor.go index 3288a505d80..715a8901271 100644 --- a/service/internal/graph/processor.go +++ b/service/internal/graph/processor.go @@ -8,23 +8,22 @@ import ( "fmt" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componentattribute" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer/xconsumer" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/pipeline/xpipeline" "go.opentelemetry.io/collector/processor" + "go.opentelemetry.io/collector/service/internal/attribute" "go.opentelemetry.io/collector/service/internal/builders" - "go.opentelemetry.io/collector/service/internal/components" ) -const processorSeed = "processor" - var _ consumerNode = (*processorNode)(nil) // Every processor instance is unique to one pipeline. // Therefore, nodeID is derived from "pipeline ID" and "component ID". type processorNode struct { - nodeID + attribute.Attributes componentID component.ID pipelineID pipeline.ID component.Component @@ -32,7 +31,7 @@ type processorNode struct { func newProcessorNode(pipelineID pipeline.ID, procID component.ID) *processorNode { return &processorNode{ - nodeID: newNodeID(processorSeed, pipelineID.String(), procID.String()), + Attributes: attribute.Processor(pipelineID, procID), componentID: procID, pipelineID: pipelineID, } @@ -48,7 +47,7 @@ func (n *processorNode) buildComponent(ctx context.Context, builder *builders.ProcessorBuilder, next baseConsumer, ) error { - tel.Logger = components.ProcessorLogger(tel.Logger, n.componentID, n.pipelineID) + tel.Logger = componentattribute.NewLogger(tel.Logger, n.Attributes.Set()) set := processor.Settings{ID: n.componentID, TelemetrySettings: tel, BuildInfo: info} var err error switch n.pipelineID.Signal() { diff --git a/service/internal/graph/receiver.go b/service/internal/graph/receiver.go index 48f7a36d148..095e15d98de 100644 --- a/service/internal/graph/receiver.go +++ b/service/internal/graph/receiver.go @@ -8,22 +8,21 @@ import ( "fmt" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componentattribute" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer/xconsumer" "go.opentelemetry.io/collector/internal/fanoutconsumer" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/pipeline/xpipeline" "go.opentelemetry.io/collector/receiver" + "go.opentelemetry.io/collector/service/internal/attribute" "go.opentelemetry.io/collector/service/internal/builders" - "go.opentelemetry.io/collector/service/internal/components" ) -const receiverSeed = "receiver" - // A receiver instance can be shared by multiple pipelines of the same type. // Therefore, nodeID is derived from "pipeline type" and "component ID". type receiverNode struct { - nodeID + attribute.Attributes componentID component.ID pipelineType pipeline.Signal component.Component @@ -31,7 +30,7 @@ type receiverNode struct { func newReceiverNode(pipelineType pipeline.Signal, recvID component.ID) *receiverNode { return &receiverNode{ - nodeID: newNodeID(receiverSeed, pipelineType.String(), recvID.String()), + Attributes: attribute.Receiver(pipelineType, recvID), componentID: recvID, pipelineType: pipelineType, } @@ -43,7 +42,7 @@ func (n *receiverNode) buildComponent(ctx context.Context, builder *builders.ReceiverBuilder, nexts []baseConsumer, ) error { - tel.Logger = components.ReceiverLogger(tel.Logger, n.componentID, n.pipelineType) + tel.Logger = componentattribute.NewLogger(tel.Logger, n.Attributes.Set()) set := receiver.Settings{ID: n.componentID, TelemetrySettings: tel, BuildInfo: info} var err error switch n.pipelineType { diff --git a/service/internal/graph/util_test.go b/service/internal/graph/util_test.go index 60be0a3d57a..5e27bf6f340 100644 --- a/service/internal/graph/util_test.go +++ b/service/internal/graph/util_test.go @@ -6,6 +6,7 @@ package graph import ( "context" "errors" + "hash/fnv" "sync" "go.opentelemetry.io/collector/component" @@ -37,7 +38,9 @@ type testNode struct { // ID satisfies the graph.Node interface, allowing // testNode to be used in a simple.DirectedGraph func (n *testNode) ID() int64 { - return int64(newNodeID(n.id.String())) + h := fnv.New64a() + h.Write([]byte(n.id.String())) + return int64(h.Sum64()) // #nosec G115 } func (n *testNode) Start(ctx context.Context, _ component.Host) error { diff --git a/service/internal/metadata/generated_telemetry.go b/service/internal/metadata/generated_telemetry.go index 99cf9b2839b..3741a926d17 100644 --- a/service/internal/metadata/generated_telemetry.go +++ b/service/internal/metadata/generated_telemetry.go @@ -59,16 +59,6 @@ func (tbof telemetryBuilderOptionFunc) apply(mb *TelemetryBuilder) { tbof(mb) } -// Deprecated: [v0.119.0] use RegisterProcessCPUSecondsCallback. -func WithProcessCPUSecondsCallback(cb func() float64, opts ...metric.ObserveOption) TelemetryBuilderOption { - return telemetryBuilderOptionFunc(func(builder *TelemetryBuilder) { - builder.observeProcessCPUSeconds = func(_ context.Context, o metric.Observer) error { - o.ObserveFloat64(builder.ProcessCPUSeconds, cb(), opts...) - return nil - } - }) -} - // RegisterProcessCPUSecondsCallback sets callback for observable ProcessCPUSeconds metric. func (builder *TelemetryBuilder) RegisterProcessCPUSecondsCallback(cb metric.Float64Callback) error { reg, err := builder.meter.RegisterCallback(func(ctx context.Context, o metric.Observer) error { @@ -84,16 +74,6 @@ func (builder *TelemetryBuilder) RegisterProcessCPUSecondsCallback(cb metric.Flo return nil } -// Deprecated: [v0.119.0] use RegisterProcessMemoryRssCallback. -func WithProcessMemoryRssCallback(cb func() int64, opts ...metric.ObserveOption) TelemetryBuilderOption { - return telemetryBuilderOptionFunc(func(builder *TelemetryBuilder) { - builder.observeProcessMemoryRss = func(_ context.Context, o metric.Observer) error { - o.ObserveInt64(builder.ProcessMemoryRss, cb(), opts...) - return nil - } - }) -} - // RegisterProcessMemoryRssCallback sets callback for observable ProcessMemoryRss metric. func (builder *TelemetryBuilder) RegisterProcessMemoryRssCallback(cb metric.Int64Callback) error { reg, err := builder.meter.RegisterCallback(func(ctx context.Context, o metric.Observer) error { @@ -109,16 +89,6 @@ func (builder *TelemetryBuilder) RegisterProcessMemoryRssCallback(cb metric.Int6 return nil } -// Deprecated: [v0.119.0] use RegisterProcessRuntimeHeapAllocBytesCallback. -func WithProcessRuntimeHeapAllocBytesCallback(cb func() int64, opts ...metric.ObserveOption) TelemetryBuilderOption { - return telemetryBuilderOptionFunc(func(builder *TelemetryBuilder) { - builder.observeProcessRuntimeHeapAllocBytes = func(_ context.Context, o metric.Observer) error { - o.ObserveInt64(builder.ProcessRuntimeHeapAllocBytes, cb(), opts...) - return nil - } - }) -} - // RegisterProcessRuntimeHeapAllocBytesCallback sets callback for observable ProcessRuntimeHeapAllocBytes metric. func (builder *TelemetryBuilder) RegisterProcessRuntimeHeapAllocBytesCallback(cb metric.Int64Callback) error { reg, err := builder.meter.RegisterCallback(func(ctx context.Context, o metric.Observer) error { @@ -134,16 +104,6 @@ func (builder *TelemetryBuilder) RegisterProcessRuntimeHeapAllocBytesCallback(cb return nil } -// Deprecated: [v0.119.0] use RegisterProcessRuntimeTotalAllocBytesCallback. -func WithProcessRuntimeTotalAllocBytesCallback(cb func() int64, opts ...metric.ObserveOption) TelemetryBuilderOption { - return telemetryBuilderOptionFunc(func(builder *TelemetryBuilder) { - builder.observeProcessRuntimeTotalAllocBytes = func(_ context.Context, o metric.Observer) error { - o.ObserveInt64(builder.ProcessRuntimeTotalAllocBytes, cb(), opts...) - return nil - } - }) -} - // RegisterProcessRuntimeTotalAllocBytesCallback sets callback for observable ProcessRuntimeTotalAllocBytes metric. func (builder *TelemetryBuilder) RegisterProcessRuntimeTotalAllocBytesCallback(cb metric.Int64Callback) error { reg, err := builder.meter.RegisterCallback(func(ctx context.Context, o metric.Observer) error { @@ -159,16 +119,6 @@ func (builder *TelemetryBuilder) RegisterProcessRuntimeTotalAllocBytesCallback(c return nil } -// Deprecated: [v0.119.0] use RegisterProcessRuntimeTotalSysMemoryBytesCallback. -func WithProcessRuntimeTotalSysMemoryBytesCallback(cb func() int64, opts ...metric.ObserveOption) TelemetryBuilderOption { - return telemetryBuilderOptionFunc(func(builder *TelemetryBuilder) { - builder.observeProcessRuntimeTotalSysMemoryBytes = func(_ context.Context, o metric.Observer) error { - o.ObserveInt64(builder.ProcessRuntimeTotalSysMemoryBytes, cb(), opts...) - return nil - } - }) -} - // RegisterProcessRuntimeTotalSysMemoryBytesCallback sets callback for observable ProcessRuntimeTotalSysMemoryBytes metric. func (builder *TelemetryBuilder) RegisterProcessRuntimeTotalSysMemoryBytesCallback(cb metric.Int64Callback) error { reg, err := builder.meter.RegisterCallback(func(ctx context.Context, o metric.Observer) error { @@ -184,16 +134,6 @@ func (builder *TelemetryBuilder) RegisterProcessRuntimeTotalSysMemoryBytesCallba return nil } -// Deprecated: [v0.119.0] use RegisterProcessUptimeCallback. -func WithProcessUptimeCallback(cb func() float64, opts ...metric.ObserveOption) TelemetryBuilderOption { - return telemetryBuilderOptionFunc(func(builder *TelemetryBuilder) { - builder.observeProcessUptime = func(_ context.Context, o metric.Observer) error { - o.ObserveFloat64(builder.ProcessUptime, cb(), opts...) - return nil - } - }) -} - // RegisterProcessUptimeCallback sets callback for observable ProcessUptime metric. func (builder *TelemetryBuilder) RegisterProcessUptimeCallback(cb metric.Float64Callback) error { reg, err := builder.meter.RegisterCallback(func(ctx context.Context, o metric.Observer) error { diff --git a/service/internal/metadatatest/generated_telemetrytest.go b/service/internal/metadatatest/generated_telemetrytest.go index 8f988ab5952..d6781885162 100644 --- a/service/internal/metadatatest/generated_telemetrytest.go +++ b/service/internal/metadatatest/generated_telemetrytest.go @@ -3,7 +3,6 @@ package metadatatest import ( - "context" "testing" "github.com/stretchr/testify/require" @@ -13,30 +12,6 @@ import ( "go.opentelemetry.io/collector/component/componenttest" ) -// Deprecated: [v0.119.0] Use componenttest.Telemetry -type Telemetry struct { - *componenttest.Telemetry -} - -// Deprecated: [v0.119.0] Use componenttest.NewTelemetry -func SetupTelemetry(opts ...componenttest.TelemetryOption) Telemetry { - return Telemetry{Telemetry: componenttest.NewTelemetry(opts...)} -} - -// Deprecated: [v0.119.0] Use metadatatest.AssertEqual* -func (tt *Telemetry) AssertMetrics(t *testing.T, expected []metricdata.Metrics, opts ...metricdatatest.Option) { - var md metricdata.ResourceMetrics - require.NoError(t, tt.Reader.Collect(context.Background(), &md)) - // ensure all required metrics are present - for _, want := range expected { - got := getMetricFromResource(want.Name, md) - metricdatatest.AssertEqual(t, want, got, opts...) - } - - // ensure no additional metrics are emitted - require.Equal(t, len(expected), lenMetrics(md)) -} - func AssertEqualProcessCPUSeconds(t *testing.T, tt *componenttest.Telemetry, dps []metricdata.DataPoint[float64], opts ...metricdatatest.Option) { want := metricdata.Metrics{ Name: "otelcol_process_cpu_seconds", diff --git a/service/internal/metadatatest/generated_telemetrytest_test.go b/service/internal/metadatatest/generated_telemetrytest_test.go index fb882a8faf1..c1a84d4188a 100644 --- a/service/internal/metadatatest/generated_telemetrytest_test.go +++ b/service/internal/metadatatest/generated_telemetrytest_test.go @@ -11,11 +11,12 @@ import ( "go.opentelemetry.io/otel/sdk/metric/metricdata" "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest" + "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/service/internal/metadata" ) func TestSetupTelemetry(t *testing.T) { - testTel := SetupTelemetry() + testTel := componenttest.NewTelemetry() tb, err := metadata.NewTelemetryBuilder(testTel.NewTelemetrySettings()) require.NoError(t, err) defer tb.Shutdown() @@ -43,91 +44,22 @@ func TestSetupTelemetry(t *testing.T) { observer.Observe(1) return nil })) - - testTel.AssertMetrics(t, []metricdata.Metrics{ - { - Name: "otelcol_process_cpu_seconds", - Description: "Total CPU user and system time in seconds [alpha]", - Unit: "s", - Data: metricdata.Sum[float64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[float64]{ - {}, - }, - }, - }, - { - Name: "otelcol_process_memory_rss", - Description: "Total physical memory (resident set size) [alpha]", - Unit: "By", - Data: metricdata.Gauge[int64]{ - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_process_runtime_heap_alloc_bytes", - Description: "Bytes of allocated heap objects (see 'go doc runtime.MemStats.HeapAlloc') [alpha]", - Unit: "By", - Data: metricdata.Gauge[int64]{ - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_process_runtime_total_alloc_bytes", - Description: "Cumulative bytes allocated for heap objects (see 'go doc runtime.MemStats.TotalAlloc') [alpha]", - Unit: "By", - Data: metricdata.Sum[int64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_process_runtime_total_sys_memory_bytes", - Description: "Total bytes of memory obtained from the OS (see 'go doc runtime.MemStats.Sys') [alpha]", - Unit: "By", - Data: metricdata.Gauge[int64]{ - DataPoints: []metricdata.DataPoint[int64]{ - {}, - }, - }, - }, - { - Name: "otelcol_process_uptime", - Description: "Uptime of the process [alpha]", - Unit: "s", - Data: metricdata.Sum[float64]{ - Temporality: metricdata.CumulativeTemporality, - IsMonotonic: true, - DataPoints: []metricdata.DataPoint[float64]{ - {}, - }, - }, - }, - }, metricdatatest.IgnoreTimestamp(), metricdatatest.IgnoreValue()) - AssertEqualProcessCPUSeconds(t, testTel.Telemetry, + AssertEqualProcessCPUSeconds(t, testTel, []metricdata.DataPoint[float64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessMemoryRss(t, testTel.Telemetry, + AssertEqualProcessMemoryRss(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessRuntimeHeapAllocBytes(t, testTel.Telemetry, + AssertEqualProcessRuntimeHeapAllocBytes(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessRuntimeTotalAllocBytes(t, testTel.Telemetry, + AssertEqualProcessRuntimeTotalAllocBytes(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessRuntimeTotalSysMemoryBytes(t, testTel.Telemetry, + AssertEqualProcessRuntimeTotalSysMemoryBytes(t, testTel, []metricdata.DataPoint[int64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) - AssertEqualProcessUptime(t, testTel.Telemetry, + AssertEqualProcessUptime(t, testTel, []metricdata.DataPoint[float64]{{Value: 1}}, metricdatatest.IgnoreTimestamp()) diff --git a/service/internal/moduleinfo/moduleinfo.go b/service/internal/moduleinfo/moduleinfo.go new file mode 100644 index 00000000000..8e67b89b6ae --- /dev/null +++ b/service/internal/moduleinfo/moduleinfo.go @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package moduleinfo // import "go.opentelemetry.io/collector/service/internal/moduleinfo" + +import "go.opentelemetry.io/collector/component" + +type ModuleInfo struct { + // BuilderRef is the raw string passed in the builder configuration used to build this service. + BuilderRef string +} + +// ModuleInfos describes the go module for each component. +type ModuleInfos struct { + Receiver map[component.Type]ModuleInfo + Processor map[component.Type]ModuleInfo + Exporter map[component.Type]ModuleInfo + Extension map[component.Type]ModuleInfo + Connector map[component.Type]ModuleInfo +} diff --git a/service/pipelines/config_test.go b/service/pipelines/config_test.go index 19ca0be6d4a..c24f8c744c9 100644 --- a/service/pipelines/config_test.go +++ b/service/pipelines/config_test.go @@ -10,6 +10,7 @@ import ( "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/confmap/xconfmap" "go.opentelemetry.io/collector/featuregate" "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/pipeline/xpipeline" @@ -108,9 +109,9 @@ func TestConfigValidate(t *testing.T) { t.Run(tt.name, func(t *testing.T) { cfg := tt.cfgFn(t) if tt.expected != nil { - require.ErrorContains(t, component.ValidateConfig(cfg), tt.expected.Error()) + require.ErrorContains(t, xconfmap.Validate(cfg), tt.expected.Error()) } else { - require.NoError(t, component.ValidateConfig(cfg)) + require.NoError(t, xconfmap.Validate(cfg)) } // Clean up the profiles support gate, which may have been enabled in `cfgFn`. diff --git a/service/service.go b/service/service.go index 1cde310a5a4..9e2f9e22a1c 100644 --- a/service/service.go +++ b/service/service.go @@ -33,6 +33,7 @@ import ( "go.opentelemetry.io/collector/service/extensions" "go.opentelemetry.io/collector/service/internal/builders" "go.opentelemetry.io/collector/service/internal/graph" + "go.opentelemetry.io/collector/service/internal/moduleinfo" "go.opentelemetry.io/collector/service/internal/proctelemetry" "go.opentelemetry.io/collector/service/internal/resource" "go.opentelemetry.io/collector/service/internal/status" @@ -56,6 +57,12 @@ var disableHighCardinalityMetricsFeatureGate = featuregate.GlobalRegistry().Must featuregate.WithRegisterDescription("controls whether the collector should enable potentially high"+ "cardinality metrics. The gate will be removed when the collector allows for view configuration.")) +// ModuleInfo describes the Go module for a particular component. +type ModuleInfo = moduleinfo.ModuleInfo + +// ModuleInfo describes the go module for all components. +type ModuleInfos = moduleinfo.ModuleInfos + // Settings holds configuration for building a new Service. type Settings struct { // BuildInfo provides collector start information. @@ -88,7 +95,7 @@ type Settings struct { ExtensionsFactories map[component.Type]extension.Factory // ModuleInfo describes the go module for each component. - ModuleInfo extension.ModuleInfo + ModuleInfos ModuleInfos // AsyncErrorChannel is the channel that is used to report fatal errors. AsyncErrorChannel chan error @@ -117,7 +124,7 @@ func New(ctx context.Context, set Settings, cfg Config) (*Service, error) { Connectors: builders.NewConnector(set.ConnectorsConfigs, set.ConnectorsFactories), Extensions: builders.NewExtension(set.ExtensionsConfigs, set.ExtensionsFactories), - ModuleInfo: set.ModuleInfo, + ModuleInfos: set.ModuleInfos, BuildInfo: set.BuildInfo, AsyncErrorChannel: set.AsyncErrorChannel, }, @@ -196,7 +203,6 @@ func New(ctx context.Context, set Settings, cfg Config) (*Service, error) { Logger: logger, MeterProvider: mp, TracerProvider: tracerProvider, - MetricsLevel: cfg.Telemetry.Metrics.Level, // Construct telemetry attributes from build info and config's resource attributes. Resource: pcommonRes, } @@ -342,7 +348,6 @@ func (srv *Service) initExtensions(ctx context.Context, cfg extensions.Config) e Telemetry: srv.telemetrySettings, BuildInfo: srv.buildInfo, Extensions: srv.host.Extensions, - ModuleInfo: srv.host.ModuleInfo, } if srv.host.ServiceExtensions, err = extensions.New(ctx, extensionsSettings, cfg, extensions.WithReporter(srv.host.Reporter)); err != nil { return fmt.Errorf("failed to build extensions: %w", err) diff --git a/versions.yaml b/versions.yaml index b524ee3cf42..f081bbb869f 100644 --- a/versions.yaml +++ b/versions.yaml @@ -30,8 +30,10 @@ module-sets: - go.opentelemetry.io/collector/cmd/builder - go.opentelemetry.io/collector/cmd/mdatagen - go.opentelemetry.io/collector/component - - go.opentelemetry.io/collector/component/componenttest + - go.opentelemetry.io/collector/component/componentattribute - go.opentelemetry.io/collector/component/componentstatus + - go.opentelemetry.io/collector/component/componenttest + - go.opentelemetry.io/collector/confmap/xconfmap - go.opentelemetry.io/collector/config/configauth - go.opentelemetry.io/collector/config/configgrpc - go.opentelemetry.io/collector/config/confighttp