[component] Refactor to use pipeline.ID and pipeline.Signal (#11204)
#### Description Depends on https://github.com/open-telemetry/opentelemetry-collector/pull/11209 This PR is a non-breaking implementation of https://github.com/open-telemetry/opentelemetry-collector/pull/10947. It adds a new module, `pipeline`, which houses a `pipeline.ID` and `pipeline.Signal`. `pipeline.ID` is used to identify a pipeline within the service. `pipeline.Signal` is uses to identify the signal associated to a pipeline. I do this work begrudgingly. As the PR shows, this is a huge refactor when done in a non-breaking way, will require 3 full releases, and doesn't benefit our [End Users or, in my opinion, our Component Developers or Collector Library Users](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CONTRIBUTING.md#target-audiences). I view this refactor as a Nice-To-Have, not a requirement for Component 1.0. <!-- Issue number if applicable --> #### Link to tracking issue Works towards https://github.com/open-telemetry/opentelemetry-collector/issues/9429
This commit is contained in:
parent
d17559b6e8
commit
77bb849aa0
|
|
@ -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: componentprofiles
|
||||
|
||||
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
|
||||
note: Deprecates `DataTypeProfiles`. Use `SignalProfiles` instead.
|
||||
|
||||
# One or more tracking issues or pull requests related to the change
|
||||
issues: [11204]
|
||||
|
||||
# (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]
|
||||
|
|
@ -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: componentstatus
|
||||
|
||||
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
|
||||
note: Deprecates `NewInstanceID`, `AllPipelineIDs`, and `WithPipelines`. Use `NewInstanceIDWithPipelineIDs`, `AllPipelineIDsWithPipelineIDs`, and `WithPipelineIDs` instead.
|
||||
|
||||
# One or more tracking issues or pull requests related to the change
|
||||
issues: [11204]
|
||||
|
||||
# (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]
|
||||
|
|
@ -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: exporterqueue
|
||||
|
||||
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
|
||||
note: Deprecates `Settings.DataType`. Use `Settings.Signal` instead.
|
||||
|
||||
# One or more tracking issues or pull requests related to the change
|
||||
issues: [11204]
|
||||
|
||||
# (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]
|
||||
|
|
@ -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: service
|
||||
|
||||
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
|
||||
note: Deprecates `pipelines.Config`. Use `pipelines.ConfigWithPipelineID` instead.
|
||||
|
||||
# One or more tracking issues or pull requests related to the change
|
||||
issues: [11204]
|
||||
|
||||
# (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]
|
||||
|
|
@ -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: connector
|
||||
|
||||
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
|
||||
note: Change `TracesRouterAndConsumer`, `NewTracesRouter`, `MetricsRouterAndConsumer`, `NewMetricsRouter`, `LogsRouterAndConsumer`, and `NewLogsRouter` to use `pipeline.ID` instead of `component.ID`.
|
||||
|
||||
# One or more tracking issues or pull requests related to the change
|
||||
issues: [11204]
|
||||
|
||||
# (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]
|
||||
|
|
@ -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: Deprecates `DataType`, `DataTypeTraces`, `DataTypeMetrics`, and `DataTypeLogs`. Use `pipeline.Signal`, `SignalTraces`, `SignalMetrics`, and `SignalLogs` instead.
|
||||
|
||||
# One or more tracking issues or pull requests related to the change
|
||||
issues: [11204]
|
||||
|
||||
# (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]
|
||||
|
|
@ -78,6 +78,8 @@ var (
|
|||
"/extension/zpagesextension",
|
||||
"/featuregate",
|
||||
"/internal/globalgates",
|
||||
"/internal/globalsignal",
|
||||
"/pipeline",
|
||||
"/processor",
|
||||
"/processor/batchprocessor",
|
||||
"/processor/memorylimiterprocessor",
|
||||
|
|
|
|||
|
|
@ -49,11 +49,13 @@ replaces:
|
|||
- go.opentelemetry.io/collector/extension/zpagesextension => ${WORKSPACE_DIR}/extension/zpagesextension
|
||||
- go.opentelemetry.io/collector/featuregate => ${WORKSPACE_DIR}/featuregate
|
||||
- go.opentelemetry.io/collector/internal/globalgates => ${WORKSPACE_DIR}/internal/globalgates
|
||||
- go.opentelemetry.io/collector/internal/globalsignal => ${WORKSPACE_DIR}/internal/globalsignal
|
||||
- go.opentelemetry.io/collector/otelcol => ${WORKSPACE_DIR}/otelcol
|
||||
- go.opentelemetry.io/collector/otelcol/otelcoltest => ${WORKSPACE_DIR}/otelcol/otelcoltest
|
||||
- go.opentelemetry.io/collector/pdata => ${WORKSPACE_DIR}/pdata
|
||||
- go.opentelemetry.io/collector/pdata/pprofile => ${WORKSPACE_DIR}/pdata/pprofile
|
||||
- go.opentelemetry.io/collector/pdata/testdata => ${WORKSPACE_DIR}/pdata/testdata
|
||||
- go.opentelemetry.io/collector/pipeline => ${WORKSPACE_DIR}/pipeline
|
||||
- go.opentelemetry.io/collector/processor => ${WORKSPACE_DIR}/processor
|
||||
- go.opentelemetry.io/collector/processor/processorprofiles => ${WORKSPACE_DIR}/processor/processorprofiles
|
||||
- go.opentelemetry.io/collector/receiver => ${WORKSPACE_DIR}/receiver
|
||||
|
|
|
|||
|
|
@ -42,8 +42,11 @@ require (
|
|||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
go.opentelemetry.io/collector/component/componentprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer/consumerprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver/receiverprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.30.0 // indirect
|
||||
|
|
@ -89,3 +92,9 @@ replace go.opentelemetry.io/collector/consumer/consumerprofiles => ../../consume
|
|||
replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/consumertest
|
||||
|
||||
replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receiver/receiverprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ import (
|
|||
"go.opentelemetry.io/collector/connector/connectortest"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumertest"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
{{- end }}
|
||||
{{- if or isExporter isProcessor }}
|
||||
"go.opentelemetry.io/collector/pdata/pcommon"
|
||||
|
|
@ -372,7 +373,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "logs_to_logs",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewLogsRouter(map[component.ID]consumer.Logs{component.NewID(component.DataTypeLogs): consumertest.NewNop()})
|
||||
router := connector.NewLogsRouter(map[pipeline.ID]consumer.Logs{pipeline.NewID(pipeline.SignalLogs): consumertest.NewNop()})
|
||||
return factory.CreateLogsToLogs(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
@ -381,7 +382,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "logs_to_metrics",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{component.NewID(component.DataTypeMetrics): consumertest.NewNop()})
|
||||
router := connector.NewMetricsRouter(map[pipeline.ID]consumer.Metrics{pipeline.NewID(pipeline.SignalMetrics): consumertest.NewNop()})
|
||||
return factory.CreateLogsToMetrics(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
@ -390,7 +391,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "logs_to_traces",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewTracesRouter(map[component.ID]consumer.Traces{component.NewID(component.DataTypeTraces): consumertest.NewNop()})
|
||||
router := connector.NewTracesRouter(map[pipeline.ID]consumer.Traces{pipeline.NewID(pipeline.SignalTraces): consumertest.NewNop()})
|
||||
return factory.CreateLogsToTraces(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
@ -399,7 +400,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "metrics_to_logs",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewLogsRouter(map[component.ID]consumer.Logs{component.NewID(component.DataTypeLogs): consumertest.NewNop()})
|
||||
router := connector.NewLogsRouter(map[pipeline.ID]consumer.Logs{pipeline.NewID(pipeline.SignalLogs): consumertest.NewNop()})
|
||||
return factory.CreateMetricsToLogs(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
@ -408,7 +409,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "metrics_to_metrics",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{component.NewID(component.DataTypeMetrics): consumertest.NewNop()})
|
||||
router := connector.NewMetricsRouter(map[pipeline.ID]consumer.Metrics{pipeline.NewID(pipeline.SignalMetrics): consumertest.NewNop()})
|
||||
return factory.CreateMetricsToMetrics(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
@ -417,7 +418,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "metrics_to_traces",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewTracesRouter(map[component.ID]consumer.Traces{component.NewID(component.DataTypeTraces): consumertest.NewNop()})
|
||||
router := connector.NewTracesRouter(map[pipeline.ID]consumer.Traces{pipeline.NewID(pipeline.SignalTraces): consumertest.NewNop()})
|
||||
return factory.CreateMetricsToTraces(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
@ -426,7 +427,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "traces_to_logs",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewLogsRouter(map[component.ID]consumer.Logs{component.NewID(component.DataTypeLogs): consumertest.NewNop()})
|
||||
router := connector.NewLogsRouter(map[pipeline.ID]consumer.Logs{pipeline.NewID(pipeline.SignalLogs): consumertest.NewNop()})
|
||||
return factory.CreateTracesToLogs(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
@ -435,7 +436,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "traces_to_metrics",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{component.NewID(component.DataTypeMetrics): consumertest.NewNop()})
|
||||
router := connector.NewMetricsRouter(map[pipeline.ID]consumer.Metrics{pipeline.NewID(pipeline.SignalMetrics): consumertest.NewNop()})
|
||||
return factory.CreateTracesToMetrics(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
@ -444,7 +445,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "traces_to_traces",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewTracesRouter(map[component.ID]consumer.Traces{component.NewID(component.DataTypeTraces): consumertest.NewNop()})
|
||||
router := connector.NewTracesRouter(map[pipeline.ID]consumer.Traces{pipeline.NewID(pipeline.SignalTraces): consumertest.NewNop()})
|
||||
return factory.CreateTracesToTraces(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ providers:
|
|||
replaces:
|
||||
- go.opentelemetry.io/collector => ../../
|
||||
- go.opentelemetry.io/collector/internal/globalgates => ../../internal/globalgates
|
||||
- go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
- go.opentelemetry.io/collector/client => ../../client
|
||||
- go.opentelemetry.io/collector/otelcol => ../../otelcol
|
||||
- go.opentelemetry.io/collector/component => ../../component
|
||||
|
|
@ -85,6 +86,7 @@ replaces:
|
|||
- go.opentelemetry.io/collector/pdata => ../../pdata
|
||||
- go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata
|
||||
- go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile
|
||||
- go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
- go.opentelemetry.io/collector/processor => ../../processor
|
||||
- go.opentelemetry.io/collector/processor/batchprocessor => ../../processor/batchprocessor
|
||||
- go.opentelemetry.io/collector/processor/memorylimiterprocessor => ../../processor/memorylimiterprocessor
|
||||
|
|
|
|||
|
|
@ -103,9 +103,11 @@ require (
|
|||
go.opentelemetry.io/collector/extension/extensioncapabilities v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/featuregate v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalgates v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/testdata v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/processor/processorprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver/receiverprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/semconv v0.109.0 // indirect
|
||||
|
|
@ -150,6 +152,8 @@ replace go.opentelemetry.io/collector => ../../
|
|||
|
||||
replace go.opentelemetry.io/collector/internal/globalgates => ../../internal/globalgates
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/client => ../../client
|
||||
|
||||
replace go.opentelemetry.io/collector/otelcol => ../../otelcol
|
||||
|
|
@ -238,6 +242,8 @@ replace go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata
|
|||
|
||||
replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/processor => ../../processor
|
||||
|
||||
replace go.opentelemetry.io/collector/processor/batchprocessor => ../../processor/batchprocessor
|
||||
|
|
|
|||
|
|
@ -7,13 +7,16 @@ package component // import "go.opentelemetry.io/collector/component"
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
var (
|
||||
// ErrDataTypeIsNotSupported can be returned by receiver, exporter, processor or connector factory funcs that create the
|
||||
// Component if the particular telemetry data type is not supported by the receiver, exporter, processor or connector factory.
|
||||
ErrDataTypeIsNotSupported = errors.New("telemetry type is not supported")
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use pipeline.ErrSignalNotSupported instead
|
||||
ErrDataTypeIsNotSupported = pipeline.ErrSignalNotSupported
|
||||
)
|
||||
|
||||
// Component is either a receiver, exporter, processor, connector, or an extension.
|
||||
|
|
|
|||
|
|
@ -3,13 +3,21 @@
|
|||
|
||||
package componentprofiles // import "go.opentelemetry.io/collector/component/componentprofiles"
|
||||
|
||||
import "go.opentelemetry.io/collector/component"
|
||||
import (
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/internal/globalsignal"
|
||||
)
|
||||
|
||||
// nolint
|
||||
func mustNewDataType(strType string) component.DataType {
|
||||
return component.MustNewType(strType)
|
||||
}
|
||||
|
||||
var (
|
||||
// DataTypeProfiles is the data type tag for profiles.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use SignalProfiles instead
|
||||
DataTypeProfiles = mustNewDataType("profiles")
|
||||
|
||||
SignalProfiles = globalsignal.MustNewSignal("profiles")
|
||||
)
|
||||
|
|
|
|||
|
|
@ -2,12 +2,16 @@ module go.opentelemetry.io/collector/component/componentprofiles
|
|||
|
||||
go 1.22.0
|
||||
|
||||
require go.opentelemetry.io/collector/component v0.109.0
|
||||
require (
|
||||
go.opentelemetry.io/collector/component v0.109.0
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.30.0 // indirect
|
||||
|
|
@ -26,3 +30,7 @@ replace go.opentelemetry.io/collector/pdata => ../../pdata
|
|||
replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry
|
||||
|
||||
replace go.opentelemetry.io/collector/component => ../
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ go 1.22.0
|
|||
require (
|
||||
github.com/stretchr/testify v1.9.0
|
||||
go.opentelemetry.io/collector/component v0.109.0
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0
|
||||
)
|
||||
|
||||
require (
|
||||
|
|
@ -12,6 +13,7 @@ require (
|
|||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
|
|
@ -32,3 +34,7 @@ replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/con
|
|||
replace go.opentelemetry.io/collector/component => ../
|
||||
|
||||
replace go.opentelemetry.io/collector/pdata => ../../pdata
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import (
|
|||
"strings"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// pipelineDelim is the delimiter for internal representation of pipeline
|
||||
|
|
@ -26,7 +27,19 @@ type InstanceID struct {
|
|||
}
|
||||
|
||||
// NewInstanceID returns an ID that uniquely identifies a component.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use NewInstanceIDWithPipelineID instead
|
||||
func NewInstanceID(componentID component.ID, kind component.Kind, pipelineIDs ...component.ID) *InstanceID {
|
||||
instanceID := &InstanceID{
|
||||
componentID: componentID,
|
||||
kind: kind,
|
||||
}
|
||||
instanceID.addPipelines(convertToPipelineIDs(pipelineIDs))
|
||||
return instanceID
|
||||
}
|
||||
|
||||
// NewInstanceIDWithPipelineIDs returns an InstanceID that uniquely identifies a component.
|
||||
func NewInstanceIDWithPipelineIDs(componentID component.ID, kind component.Kind, pipelineIDs ...pipeline.ID) *InstanceID {
|
||||
instanceID := &InstanceID{
|
||||
componentID: componentID,
|
||||
kind: kind,
|
||||
|
|
@ -47,6 +60,8 @@ func (id *InstanceID) Kind() component.Kind {
|
|||
|
||||
// AllPipelineIDs calls f for each pipeline this instance is associated with. If
|
||||
// f returns false it will stop iteration.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use AllPipelineIDsWithPipelineIDs instead.
|
||||
func (id *InstanceID) AllPipelineIDs(f func(component.ID) bool) {
|
||||
var bs []byte
|
||||
for _, b := range []byte(id.pipelineIDs) {
|
||||
|
|
@ -66,9 +81,44 @@ func (id *InstanceID) AllPipelineIDs(f func(component.ID) bool) {
|
|||
}
|
||||
}
|
||||
|
||||
// AllPipelineIDsWithPipelineIDs calls f for each pipeline this instance is associated with. If
|
||||
// f returns false it will stop iteration.
|
||||
func (id *InstanceID) AllPipelineIDsWithPipelineIDs(f func(pipeline.ID) bool) {
|
||||
var bs []byte
|
||||
for _, b := range []byte(id.pipelineIDs) {
|
||||
if b != pipelineDelim {
|
||||
bs = append(bs, b)
|
||||
continue
|
||||
}
|
||||
pipelineID := pipeline.ID{}
|
||||
err := pipelineID.UnmarshalText(bs)
|
||||
bs = bs[:0]
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if !f(pipelineID) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// WithPipelines returns a new InstanceID updated to include the given
|
||||
// pipelineIDs.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use WithPipelineIDs instead
|
||||
func (id *InstanceID) WithPipelines(pipelineIDs ...component.ID) *InstanceID {
|
||||
instanceID := &InstanceID{
|
||||
componentID: id.componentID,
|
||||
kind: id.kind,
|
||||
pipelineIDs: id.pipelineIDs,
|
||||
}
|
||||
instanceID.addPipelines(convertToPipelineIDs(pipelineIDs))
|
||||
return instanceID
|
||||
}
|
||||
|
||||
// WithPipelineIDs returns a new InstanceID updated to include the given
|
||||
// pipelineIDs.
|
||||
func (id *InstanceID) WithPipelineIDs(pipelineIDs ...pipeline.ID) *InstanceID {
|
||||
instanceID := &InstanceID{
|
||||
componentID: id.componentID,
|
||||
kind: id.kind,
|
||||
|
|
@ -78,7 +128,7 @@ func (id *InstanceID) WithPipelines(pipelineIDs ...component.ID) *InstanceID {
|
|||
return instanceID
|
||||
}
|
||||
|
||||
func (id *InstanceID) addPipelines(pipelineIDs []component.ID) {
|
||||
func (id *InstanceID) addPipelines(pipelineIDs []pipeline.ID) {
|
||||
delim := string(pipelineDelim)
|
||||
strIDs := strings.Split(id.pipelineIDs, delim)
|
||||
for _, pID := range pipelineIDs {
|
||||
|
|
@ -88,3 +138,16 @@ func (id *InstanceID) addPipelines(pipelineIDs []component.ID) {
|
|||
strIDs = slices.Compact(strIDs)
|
||||
id.pipelineIDs = strings.Join(strIDs, delim) + delim
|
||||
}
|
||||
|
||||
func convertToPipelineIDs(ids []component.ID) []pipeline.ID {
|
||||
pipelineIDs := make([]pipeline.ID, len(ids))
|
||||
for i, id := range ids {
|
||||
if id.Name() != "" {
|
||||
pipelineIDs[i] = pipeline.MustNewIDWithName(id.Type().String(), id.Name())
|
||||
} else {
|
||||
pipelineIDs[i] = pipeline.MustNewID(id.Type().String())
|
||||
}
|
||||
|
||||
}
|
||||
return pipelineIDs
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,21 +9,22 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
func TestInstanceID(t *testing.T) {
|
||||
traces := component.MustNewID("traces")
|
||||
tracesA := component.MustNewIDWithName("traces", "a")
|
||||
tracesB := component.MustNewIDWithName("traces", "b")
|
||||
tracesC := component.MustNewIDWithName("traces", "c")
|
||||
tracesA := pipeline.MustNewIDWithName("traces", "a")
|
||||
tracesB := pipeline.MustNewIDWithName("traces", "b")
|
||||
tracesC := pipeline.MustNewIDWithName("traces", "c")
|
||||
|
||||
idTracesA := NewInstanceID(traces, component.KindReceiver, tracesA)
|
||||
idTracesAll := NewInstanceID(traces, component.KindReceiver, tracesA, tracesB, tracesC)
|
||||
idTracesA := NewInstanceIDWithPipelineIDs(traces, component.KindReceiver, tracesA)
|
||||
idTracesAll := NewInstanceIDWithPipelineIDs(traces, component.KindReceiver, tracesA, tracesB, tracesC)
|
||||
assert.NotEqual(t, idTracesA, idTracesAll)
|
||||
|
||||
assertHasPipelines := func(t *testing.T, instanceID *InstanceID, expectedPipelineIDs []component.ID) {
|
||||
var pipelineIDs []component.ID
|
||||
instanceID.AllPipelineIDs(func(id component.ID) bool {
|
||||
assertHasPipelines := func(t *testing.T, instanceID *InstanceID, expectedPipelineIDs []pipeline.ID) {
|
||||
var pipelineIDs []pipeline.ID
|
||||
instanceID.AllPipelineIDsWithPipelineIDs(func(id pipeline.ID) bool {
|
||||
pipelineIDs = append(pipelineIDs, id)
|
||||
return true
|
||||
})
|
||||
|
|
@ -34,31 +35,31 @@ func TestInstanceID(t *testing.T) {
|
|||
name string
|
||||
id1 *InstanceID
|
||||
id2 *InstanceID
|
||||
pipelineIDs []component.ID
|
||||
pipelineIDs []pipeline.ID
|
||||
}{
|
||||
{
|
||||
name: "equal instances",
|
||||
id1: idTracesA,
|
||||
id2: NewInstanceID(traces, component.KindReceiver, tracesA),
|
||||
pipelineIDs: []component.ID{tracesA},
|
||||
id2: NewInstanceIDWithPipelineIDs(traces, component.KindReceiver, tracesA),
|
||||
pipelineIDs: []pipeline.ID{tracesA},
|
||||
},
|
||||
{
|
||||
name: "equal instances - out of order",
|
||||
id1: idTracesAll,
|
||||
id2: NewInstanceID(traces, component.KindReceiver, tracesC, tracesB, tracesA),
|
||||
pipelineIDs: []component.ID{tracesA, tracesB, tracesC},
|
||||
id2: NewInstanceIDWithPipelineIDs(traces, component.KindReceiver, tracesC, tracesB, tracesA),
|
||||
pipelineIDs: []pipeline.ID{tracesA, tracesB, tracesC},
|
||||
},
|
||||
{
|
||||
name: "with pipelines",
|
||||
id1: idTracesAll,
|
||||
id2: idTracesA.WithPipelines(tracesB, tracesC),
|
||||
pipelineIDs: []component.ID{tracesA, tracesB, tracesC},
|
||||
id2: idTracesA.WithPipelineIDs(tracesB, tracesC),
|
||||
pipelineIDs: []pipeline.ID{tracesA, tracesB, tracesC},
|
||||
},
|
||||
{
|
||||
name: "with pipelines - out of order",
|
||||
id1: idTracesAll,
|
||||
id2: idTracesA.WithPipelines(tracesC, tracesB),
|
||||
pipelineIDs: []component.ID{tracesA, tracesB, tracesC},
|
||||
id2: idTracesA.WithPipelineIDs(tracesC, tracesB),
|
||||
pipelineIDs: []pipeline.ID{tracesA, tracesB, tracesC},
|
||||
},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
|
|
@ -69,24 +70,24 @@ func TestInstanceID(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestAllPipelineIDs(t *testing.T) {
|
||||
instanceID := NewInstanceID(
|
||||
func TestAllPipelineIDsWithPipelineIDs(t *testing.T) {
|
||||
instanceID := NewInstanceIDWithPipelineIDs(
|
||||
component.MustNewID("traces"),
|
||||
component.KindReceiver,
|
||||
component.MustNewIDWithName("traces", "a"),
|
||||
component.MustNewIDWithName("traces", "b"),
|
||||
component.MustNewIDWithName("traces", "c"),
|
||||
pipeline.MustNewIDWithName("traces", "a"),
|
||||
pipeline.MustNewIDWithName("traces", "b"),
|
||||
pipeline.MustNewIDWithName("traces", "c"),
|
||||
)
|
||||
|
||||
count := 0
|
||||
instanceID.AllPipelineIDs(func(component.ID) bool {
|
||||
instanceID.AllPipelineIDsWithPipelineIDs(func(pipeline.ID) bool {
|
||||
count++
|
||||
return true
|
||||
})
|
||||
assert.Equal(t, 3, count)
|
||||
|
||||
count = 0
|
||||
instanceID.AllPipelineIDs(func(component.ID) bool {
|
||||
instanceID.AllPipelineIDsWithPipelineIDs(func(pipeline.ID) bool {
|
||||
count++
|
||||
return false
|
||||
})
|
||||
|
|
|
|||
|
|
@ -147,6 +147,8 @@ func MustNewType(strType string) Type {
|
|||
|
||||
// DataType is a special Type that represents the data types supported by the collector. We currently support
|
||||
// collecting metrics, traces and logs, this can expand in the future.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use pipeline.Signal instead.
|
||||
type DataType = Type
|
||||
|
||||
func mustNewDataType(strType string) DataType {
|
||||
|
|
@ -156,12 +158,18 @@ func mustNewDataType(strType string) DataType {
|
|||
// Currently supported data types. Add new data types here when new types are supported in the future.
|
||||
var (
|
||||
// DataTypeTraces is the data type tag for traces.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use pipeline.SignalTraces instead.
|
||||
DataTypeTraces = mustNewDataType("traces")
|
||||
|
||||
// DataTypeMetrics is the data type tag for metrics.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use pipeline.SignalMetrics instead.
|
||||
DataTypeMetrics = mustNewDataType("metrics")
|
||||
|
||||
// DataTypeLogs is the data type tag for logs.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use pipeline.SignalLogs instead.
|
||||
DataTypeLogs = mustNewDataType("logs")
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ require (
|
|||
github.com/stretchr/testify v1.9.0
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0
|
||||
go.opentelemetry.io/collector/pdata v1.15.0
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0
|
||||
go.opentelemetry.io/otel v1.30.0
|
||||
go.opentelemetry.io/otel/metric v1.30.0
|
||||
go.opentelemetry.io/otel/sdk v1.30.0
|
||||
|
|
@ -23,6 +24,7 @@ require (
|
|||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
golang.org/x/net v0.28.0 // indirect
|
||||
golang.org/x/sys v0.25.0 // indirect
|
||||
golang.org/x/text v0.17.0 // indirect
|
||||
|
|
@ -40,3 +42,7 @@ retract (
|
|||
v0.76.0 // Depends on retracted pdata v1.0.0-rc10 module, use v0.76.1
|
||||
v0.69.0 // Release failed, use v0.69.1
|
||||
)
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -15,7 +15,9 @@ require (
|
|||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.30.0 // indirect
|
||||
|
|
@ -39,3 +41,7 @@ replace go.opentelemetry.io/collector/config/configtelemetry => ../configtelemet
|
|||
replace go.opentelemetry.io/collector/extension => ../../extension
|
||||
|
||||
replace go.opentelemetry.io/collector/extension/auth => ../../extension/auth
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -41,7 +41,9 @@ require (
|
|||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
go.opentelemetry.io/collector/extension v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk/metric v1.30.0 // indirect
|
||||
|
|
@ -88,3 +90,7 @@ replace go.opentelemetry.io/collector/component => ../../component
|
|||
replace go.opentelemetry.io/collector/consumer => ../../consumer
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalgates => ../../internal/globalgates
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
|
|
|||
|
|
@ -37,7 +37,9 @@ require (
|
|||
github.com/hashicorp/go-version v1.7.0 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
go.opentelemetry.io/collector/extension v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.30.0 // indirect
|
||||
|
|
@ -81,3 +83,7 @@ replace go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata
|
|||
replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalgates => ../../internal/globalgates
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import (
|
|||
"go.opentelemetry.io/collector/connector/internal"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumertest"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
@ -28,25 +29,25 @@ func TestNewFactoryNoOptions(t *testing.T) {
|
|||
assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig())
|
||||
|
||||
_, err := factory.CreateTracesToTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeTraces, component.DataTypeTraces))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalTraces, pipeline.SignalTraces))
|
||||
_, err = factory.CreateTracesToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeTraces, component.DataTypeMetrics))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalTraces, pipeline.SignalMetrics))
|
||||
_, err = factory.CreateTracesToLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeTraces, component.DataTypeLogs))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalTraces, pipeline.SignalLogs))
|
||||
|
||||
_, err = factory.CreateMetricsToTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeMetrics, component.DataTypeTraces))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalMetrics, pipeline.SignalTraces))
|
||||
_, err = factory.CreateMetricsToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeMetrics, component.DataTypeMetrics))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalMetrics, pipeline.SignalMetrics))
|
||||
_, err = factory.CreateMetricsToLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeMetrics, component.DataTypeLogs))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalMetrics, pipeline.SignalLogs))
|
||||
|
||||
_, err = factory.CreateLogsToTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeLogs, component.DataTypeTraces))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalLogs, pipeline.SignalTraces))
|
||||
_, err = factory.CreateLogsToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeLogs, component.DataTypeMetrics))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalLogs, pipeline.SignalMetrics))
|
||||
_, err = factory.CreateLogsToLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeLogs, component.DataTypeLogs))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalLogs, pipeline.SignalLogs))
|
||||
}
|
||||
|
||||
func TestNewFactoryWithSameTypes(t *testing.T) {
|
||||
|
|
@ -71,19 +72,19 @@ func TestNewFactoryWithSameTypes(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
_, err = factory.CreateTracesToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeTraces, component.DataTypeMetrics))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalTraces, pipeline.SignalMetrics))
|
||||
_, err = factory.CreateTracesToLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeTraces, component.DataTypeLogs))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalTraces, pipeline.SignalLogs))
|
||||
|
||||
_, err = factory.CreateMetricsToTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeMetrics, component.DataTypeTraces))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalMetrics, pipeline.SignalTraces))
|
||||
_, err = factory.CreateMetricsToLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeMetrics, component.DataTypeLogs))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalMetrics, pipeline.SignalLogs))
|
||||
|
||||
_, err = factory.CreateLogsToTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeLogs, component.DataTypeTraces))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalLogs, pipeline.SignalTraces))
|
||||
_, err = factory.CreateLogsToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeLogs, component.DataTypeMetrics))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalLogs, pipeline.SignalMetrics))
|
||||
}
|
||||
|
||||
func TestNewFactoryWithTranslateTypes(t *testing.T) {
|
||||
|
|
@ -99,11 +100,11 @@ func TestNewFactoryWithTranslateTypes(t *testing.T) {
|
|||
assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig())
|
||||
|
||||
_, err := factory.CreateTracesToTraces(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeTraces, component.DataTypeTraces))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalTraces, pipeline.SignalTraces))
|
||||
_, err = factory.CreateMetricsToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeMetrics, component.DataTypeMetrics))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalMetrics, pipeline.SignalMetrics))
|
||||
_, err = factory.CreateLogsToLogs(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeLogs, component.DataTypeLogs))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalLogs, pipeline.SignalLogs))
|
||||
|
||||
assert.Equal(t, component.StabilityLevelDevelopment, factory.TracesToMetricsStability())
|
||||
_, err = factory.CreateTracesToMetrics(context.Background(), Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import (
|
|||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumerprofiles"
|
||||
"go.opentelemetry.io/collector/consumer/consumertest"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
@ -31,18 +32,18 @@ func TestNewFactoryNoOptions(t *testing.T) {
|
|||
assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig())
|
||||
|
||||
_, err := factory.CreateTracesToProfiles(context.Background(), connector.Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeTraces, componentprofiles.DataTypeProfiles))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalTraces, componentprofiles.SignalProfiles))
|
||||
_, err = factory.CreateMetricsToProfiles(context.Background(), connector.Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeMetrics, componentprofiles.DataTypeProfiles))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalMetrics, componentprofiles.SignalProfiles))
|
||||
_, err = factory.CreateLogsToProfiles(context.Background(), connector.Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, component.DataTypeLogs, componentprofiles.DataTypeProfiles))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, pipeline.SignalLogs, componentprofiles.SignalProfiles))
|
||||
|
||||
_, err = factory.CreateProfilesToTraces(context.Background(), connector.Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.DataTypeProfiles, component.DataTypeTraces))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.SignalProfiles, pipeline.SignalTraces))
|
||||
_, err = factory.CreateProfilesToMetrics(context.Background(), connector.Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.DataTypeProfiles, component.DataTypeMetrics))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.SignalProfiles, pipeline.SignalMetrics))
|
||||
_, err = factory.CreateProfilesToLogs(context.Background(), connector.Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.DataTypeProfiles, component.DataTypeLogs))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.SignalProfiles, pipeline.SignalLogs))
|
||||
}
|
||||
|
||||
func TestNewFactoryWithSameTypes(t *testing.T) {
|
||||
|
|
@ -58,11 +59,11 @@ func TestNewFactoryWithSameTypes(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
_, err = factory.CreateProfilesToTraces(context.Background(), connector.Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.DataTypeProfiles, component.DataTypeTraces))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.SignalProfiles, pipeline.SignalTraces))
|
||||
_, err = factory.CreateProfilesToMetrics(context.Background(), connector.Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.DataTypeProfiles, component.DataTypeMetrics))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.SignalProfiles, pipeline.SignalMetrics))
|
||||
_, err = factory.CreateProfilesToLogs(context.Background(), connector.Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.DataTypeProfiles, component.DataTypeLogs))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.SignalProfiles, pipeline.SignalLogs))
|
||||
}
|
||||
|
||||
func TestNewFactoryWithTranslateTypes(t *testing.T) {
|
||||
|
|
@ -80,7 +81,7 @@ func TestNewFactoryWithTranslateTypes(t *testing.T) {
|
|||
assert.EqualValues(t, &defaultCfg, factory.CreateDefaultConfig())
|
||||
|
||||
_, err := factory.CreateProfilesToProfiles(context.Background(), connector.Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.DataTypeProfiles, componentprofiles.DataTypeProfiles))
|
||||
assert.Equal(t, err, internal.ErrDataTypes(testID, componentprofiles.SignalProfiles, componentprofiles.SignalProfiles))
|
||||
|
||||
assert.Equal(t, component.StabilityLevelBeta, factory.TracesToProfilesStability())
|
||||
_, err = factory.CreateTracesToProfiles(context.Background(), connector.Settings{ID: testID}, &defaultCfg, consumertest.NewNop())
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ require (
|
|||
go.opentelemetry.io/collector/consumer/consumertest v0.109.0
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0
|
||||
go.opentelemetry.io/collector/pdata/testdata v0.109.0
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0
|
||||
)
|
||||
|
||||
require (
|
||||
|
|
@ -23,6 +24,7 @@ require (
|
|||
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.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
|
|
@ -63,3 +65,7 @@ replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/con
|
|||
replace go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -4,17 +4,16 @@
|
|||
package connectorprofiles // import "go.opentelemetry.io/collector/connector/connectorprofiles"
|
||||
|
||||
import (
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/connector/internal"
|
||||
"go.opentelemetry.io/collector/consumer/consumerprofiles"
|
||||
"go.opentelemetry.io/collector/internal/fanoutconsumer"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// ProfilesRouterAndConsumer feeds the first consumerprofiles.Profiles in each of the specified pipelines.
|
||||
type ProfilesRouterAndConsumer interface {
|
||||
consumerprofiles.Profiles
|
||||
Consumer(...component.ID) (consumerprofiles.Profiles, error)
|
||||
PipelineIDs() []component.ID
|
||||
Consumer(...pipeline.ID) (consumerprofiles.Profiles, error)
|
||||
PipelineIDs() []pipeline.ID
|
||||
privateFunc()
|
||||
}
|
||||
|
||||
|
|
@ -23,7 +22,7 @@ type profilesRouter struct {
|
|||
internal.BaseRouter[consumerprofiles.Profiles]
|
||||
}
|
||||
|
||||
func NewProfilesRouter(cm map[component.ID]consumerprofiles.Profiles) ProfilesRouterAndConsumer {
|
||||
func NewProfilesRouter(cm map[pipeline.ID]consumerprofiles.Profiles) ProfilesRouterAndConsumer {
|
||||
consumers := make([]consumerprofiles.Profiles, 0, len(cm))
|
||||
for _, cons := range cm {
|
||||
consumers = append(consumers, cons)
|
||||
|
|
|
|||
|
|
@ -12,12 +12,12 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumerprofiles"
|
||||
"go.opentelemetry.io/collector/consumer/consumertest"
|
||||
"go.opentelemetry.io/collector/pdata/pprofile"
|
||||
"go.opentelemetry.io/collector/pdata/testdata"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
type mutatingProfilesSink struct {
|
||||
|
|
@ -44,13 +44,13 @@ func TestProfilesRouterMultiplexing(t *testing.T) {
|
|||
|
||||
func fuzzProfiles(numIDs, numCons, numProfiles int) func(*testing.T) {
|
||||
return func(t *testing.T) {
|
||||
allIDs := make([]component.ID, 0, numCons)
|
||||
allIDs := make([]pipeline.ID, 0, numCons)
|
||||
allCons := make([]consumerprofiles.Profiles, 0, numCons)
|
||||
allConsMap := make(map[component.ID]consumerprofiles.Profiles)
|
||||
allConsMap := make(map[pipeline.ID]consumerprofiles.Profiles)
|
||||
|
||||
// If any consumer is mutating, the router must report mutating
|
||||
for i := 0; i < numCons; i++ {
|
||||
allIDs = append(allIDs, component.MustNewIDWithName("sink", strconv.Itoa(numCons)))
|
||||
allIDs = append(allIDs, pipeline.MustNewIDWithName("sink", strconv.Itoa(numCons)))
|
||||
// Random chance for each consumer to be mutating
|
||||
if (numCons+numProfiles+i)%4 == 0 {
|
||||
allCons = append(allCons, &mutatingProfilesSink{ProfilesSink: new(consumertest.ProfilesSink)})
|
||||
|
|
@ -65,11 +65,11 @@ func fuzzProfiles(numIDs, numCons, numProfiles int) func(*testing.T) {
|
|||
|
||||
// Keep track of how many logs each consumer should receive.
|
||||
// This will be validated after every call to RouteProfiles.
|
||||
expected := make(map[component.ID]int, numCons)
|
||||
expected := make(map[pipeline.ID]int, numCons)
|
||||
|
||||
for i := 0; i < numProfiles; i++ {
|
||||
// Build a random set of ids (no duplicates)
|
||||
randCons := make(map[component.ID]bool, numIDs)
|
||||
randCons := make(map[pipeline.ID]bool, numIDs)
|
||||
for j := 0; j < numIDs; j++ {
|
||||
// This number should be pretty random and less than numCons
|
||||
conNum := (numCons + numIDs + i + j) % numCons
|
||||
|
|
@ -77,7 +77,7 @@ func fuzzProfiles(numIDs, numCons, numProfiles int) func(*testing.T) {
|
|||
}
|
||||
|
||||
// Convert to slice, update expectations
|
||||
conIDs := make([]component.ID, 0, len(randCons))
|
||||
conIDs := make([]pipeline.ID, 0, len(randCons))
|
||||
for id := range randCons {
|
||||
conIDs = append(conIDs, id)
|
||||
expected[id]++
|
||||
|
|
@ -110,16 +110,16 @@ func TestProfilessRouterConsumer(t *testing.T) {
|
|||
ctx := context.Background()
|
||||
td := testdata.GenerateProfiles(1)
|
||||
|
||||
fooID := component.MustNewID("foo")
|
||||
barID := component.MustNewID("bar")
|
||||
fooID := pipeline.MustNewID("foo")
|
||||
barID := pipeline.MustNewID("bar")
|
||||
|
||||
foo := new(consumertest.ProfilesSink)
|
||||
bar := new(consumertest.ProfilesSink)
|
||||
r := NewProfilesRouter(map[component.ID]consumerprofiles.Profiles{fooID: foo, barID: bar})
|
||||
r := NewProfilesRouter(map[pipeline.ID]consumerprofiles.Profiles{fooID: foo, barID: bar})
|
||||
|
||||
rcs := r.PipelineIDs()
|
||||
assert.Len(t, rcs, 2)
|
||||
assert.ElementsMatch(t, []component.ID{fooID, barID}, rcs)
|
||||
assert.ElementsMatch(t, []pipeline.ID{fooID, barID}, rcs)
|
||||
|
||||
assert.Empty(t, foo.AllProfiles())
|
||||
assert.Empty(t, bar.AllProfiles())
|
||||
|
|
@ -152,7 +152,7 @@ func TestProfilessRouterConsumer(t *testing.T) {
|
|||
assert.Nil(t, none)
|
||||
require.Error(t, err)
|
||||
|
||||
fake, err := r.Consumer(component.MustNewID("fake"))
|
||||
fake, err := r.Consumer(pipeline.MustNewID("fake"))
|
||||
assert.Nil(t, fake)
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import (
|
|||
"go.opentelemetry.io/collector/connector/connectortest"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumertest"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
func TestComponentFactoryType(t *testing.T) {
|
||||
|
|
@ -36,7 +37,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "logs_to_logs",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewLogsRouter(map[component.ID]consumer.Logs{component.NewID(component.DataTypeLogs): consumertest.NewNop()})
|
||||
router := connector.NewLogsRouter(map[pipeline.ID]consumer.Logs{pipeline.NewID(pipeline.SignalLogs): consumertest.NewNop()})
|
||||
return factory.CreateLogsToLogs(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
@ -44,7 +45,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "metrics_to_metrics",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{component.NewID(component.DataTypeMetrics): consumertest.NewNop()})
|
||||
router := connector.NewMetricsRouter(map[pipeline.ID]consumer.Metrics{pipeline.NewID(pipeline.SignalMetrics): consumertest.NewNop()})
|
||||
return factory.CreateMetricsToMetrics(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
@ -52,7 +53,7 @@ func TestComponentLifecycle(t *testing.T) {
|
|||
{
|
||||
name: "traces_to_traces",
|
||||
createFn: func(ctx context.Context, set connector.Settings, cfg component.Config) (component.Component, error) {
|
||||
router := connector.NewTracesRouter(map[component.ID]consumer.Traces{component.NewID(component.DataTypeTraces): consumertest.NewNop()})
|
||||
router := connector.NewTracesRouter(map[pipeline.ID]consumer.Traces{pipeline.NewID(pipeline.SignalTraces): consumertest.NewNop()})
|
||||
return factory.CreateTracesToTraces(ctx, set, cfg, router)
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ require (
|
|||
go.opentelemetry.io/collector/consumer v0.109.0
|
||||
go.opentelemetry.io/collector/consumer/consumertest v0.109.0
|
||||
go.opentelemetry.io/collector/pdata v1.15.0
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0
|
||||
go.uber.org/goleak v1.3.0
|
||||
)
|
||||
|
||||
|
|
@ -34,6 +35,7 @@ require (
|
|||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/connector/connectorprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer/consumerprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
|
|
@ -83,3 +85,7 @@ replace go.opentelemetry.io/collector/component/componentprofiles => ../../compo
|
|||
replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus
|
||||
|
||||
replace go.opentelemetry.io/collector/connector/connectorprofiles => ../connectorprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ require (
|
|||
go.opentelemetry.io/collector/pdata v1.15.0
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0
|
||||
go.opentelemetry.io/collector/pdata/testdata v0.109.0
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0
|
||||
go.uber.org/goleak v1.3.0
|
||||
go.uber.org/multierr v1.11.0
|
||||
)
|
||||
|
|
@ -29,6 +30,7 @@ require (
|
|||
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.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.30.0 // indirect
|
||||
|
|
@ -69,3 +71,7 @@ replace go.opentelemetry.io/collector/component/componentprofiles => ../componen
|
|||
replace go.opentelemetry.io/collector/component/componentstatus => ../component/componentstatus
|
||||
|
||||
replace go.opentelemetry.io/collector/connector/connectorprofiles => ./connectorprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import (
|
|||
"go.opentelemetry.io/collector/component/componentprofiles"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumerprofiles"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// Factory is a factory interface for connectors.
|
||||
|
|
@ -143,7 +144,7 @@ func (f CreateTracesToTracesFunc) CreateTracesToTraces(
|
|||
cfg component.Config,
|
||||
nextConsumer consumer.Traces) (Traces, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeTraces, component.DataTypeTraces)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalTraces, pipeline.SignalTraces)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -159,7 +160,7 @@ func (f CreateTracesToMetricsFunc) CreateTracesToMetrics(
|
|||
nextConsumer consumer.Metrics,
|
||||
) (Traces, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeTraces, component.DataTypeMetrics)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalTraces, pipeline.SignalMetrics)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -175,7 +176,7 @@ func (f CreateTracesToLogsFunc) CreateTracesToLogs(
|
|||
nextConsumer consumer.Logs,
|
||||
) (Traces, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeTraces, component.DataTypeLogs)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalTraces, pipeline.SignalLogs)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -191,7 +192,7 @@ func (f CreateTracesToProfilesFunc) CreateTracesToProfiles(
|
|||
nextConsumer consumerprofiles.Profiles,
|
||||
) (Traces, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeTraces, componentprofiles.DataTypeProfiles)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalTraces, componentprofiles.SignalProfiles)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -207,7 +208,7 @@ func (f CreateMetricsToTracesFunc) CreateMetricsToTraces(
|
|||
nextConsumer consumer.Traces,
|
||||
) (Metrics, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeMetrics, component.DataTypeTraces)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalMetrics, pipeline.SignalTraces)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -223,7 +224,7 @@ func (f CreateMetricsToMetricsFunc) CreateMetricsToMetrics(
|
|||
nextConsumer consumer.Metrics,
|
||||
) (Metrics, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeMetrics, component.DataTypeMetrics)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalMetrics, pipeline.SignalMetrics)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -239,7 +240,7 @@ func (f CreateMetricsToLogsFunc) CreateMetricsToLogs(
|
|||
nextConsumer consumer.Logs,
|
||||
) (Metrics, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeMetrics, component.DataTypeLogs)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalMetrics, pipeline.SignalLogs)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -255,7 +256,7 @@ func (f CreateMetricsToProfilesFunc) CreateMetricsToProfiles(
|
|||
nextConsumer consumerprofiles.Profiles,
|
||||
) (Metrics, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeMetrics, componentprofiles.DataTypeProfiles)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalMetrics, componentprofiles.SignalProfiles)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -271,7 +272,7 @@ func (f CreateLogsToTracesFunc) CreateLogsToTraces(
|
|||
nextConsumer consumer.Traces,
|
||||
) (Logs, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeLogs, component.DataTypeTraces)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalLogs, pipeline.SignalTraces)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -287,7 +288,7 @@ func (f CreateLogsToMetricsFunc) CreateLogsToMetrics(
|
|||
nextConsumer consumer.Metrics,
|
||||
) (Logs, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeLogs, component.DataTypeMetrics)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalLogs, pipeline.SignalMetrics)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -303,7 +304,7 @@ func (f CreateLogsToLogsFunc) CreateLogsToLogs(
|
|||
nextConsumer consumer.Logs,
|
||||
) (Logs, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeLogs, component.DataTypeLogs)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalLogs, pipeline.SignalLogs)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -319,7 +320,7 @@ func (f CreateLogsToProfilesFunc) CreateLogsToProfiles(
|
|||
nextConsumer consumerprofiles.Profiles,
|
||||
) (Logs, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, component.DataTypeLogs, componentprofiles.DataTypeProfiles)
|
||||
return nil, ErrDataTypes(set.ID, pipeline.SignalLogs, componentprofiles.SignalProfiles)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -335,7 +336,7 @@ func (f CreateProfilesToProfilesFunc) CreateProfilesToProfiles(
|
|||
nextConsumer consumerprofiles.Profiles,
|
||||
) (Profiles, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, componentprofiles.DataTypeProfiles, componentprofiles.DataTypeProfiles)
|
||||
return nil, ErrDataTypes(set.ID, componentprofiles.SignalProfiles, componentprofiles.SignalProfiles)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -351,7 +352,7 @@ func (f CreateProfilesToTracesFunc) CreateProfilesToTraces(
|
|||
nextConsumer consumer.Traces,
|
||||
) (Profiles, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, componentprofiles.DataTypeProfiles, component.DataTypeTraces)
|
||||
return nil, ErrDataTypes(set.ID, componentprofiles.SignalProfiles, pipeline.SignalTraces)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -367,7 +368,7 @@ func (f CreateProfilesToMetricsFunc) CreateProfilesToMetrics(
|
|||
nextConsumer consumer.Metrics,
|
||||
) (Profiles, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, componentprofiles.DataTypeProfiles, component.DataTypeMetrics)
|
||||
return nil, ErrDataTypes(set.ID, componentprofiles.SignalProfiles, pipeline.SignalMetrics)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -383,7 +384,7 @@ func (f CreateProfilesToLogsFunc) CreateProfilesToLogs(
|
|||
nextConsumer consumer.Logs,
|
||||
) (Profiles, error) {
|
||||
if f == nil {
|
||||
return nil, ErrDataTypes(set.ID, componentprofiles.DataTypeProfiles, component.DataTypeLogs)
|
||||
return nil, ErrDataTypes(set.ID, componentprofiles.SignalProfiles, pipeline.SignalLogs)
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -599,6 +600,6 @@ func WithProfilesToLogs(createProfilesToLogs CreateProfilesToLogsFunc, sl compon
|
|||
})
|
||||
}
|
||||
|
||||
func ErrDataTypes(id component.ID, from, to component.DataType) error {
|
||||
return fmt.Errorf("connector %q cannot connect from %s to %s: %w", id, from, to, component.ErrDataTypeIsNotSupported)
|
||||
func ErrDataTypes(id component.ID, from, to pipeline.Signal) error {
|
||||
return fmt.Errorf("connector %q cannot connect from %s to %s: %w", id, from, to, pipeline.ErrSignalNotSupported)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,31 +8,31 @@ import (
|
|||
|
||||
"go.uber.org/multierr"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
type BaseRouter[T any] struct {
|
||||
fanout func([]T) T
|
||||
Consumers map[component.ID]T
|
||||
Consumers map[pipeline.ID]T
|
||||
}
|
||||
|
||||
func NewBaseRouter[T any](fanout func([]T) T, cm map[component.ID]T) BaseRouter[T] {
|
||||
consumers := make(map[component.ID]T, len(cm))
|
||||
func NewBaseRouter[T any](fanout func([]T) T, cm map[pipeline.ID]T) BaseRouter[T] {
|
||||
consumers := make(map[pipeline.ID]T, len(cm))
|
||||
for k, v := range cm {
|
||||
consumers[k] = v
|
||||
}
|
||||
return BaseRouter[T]{fanout: fanout, Consumers: consumers}
|
||||
}
|
||||
|
||||
func (r *BaseRouter[T]) PipelineIDs() []component.ID {
|
||||
ids := make([]component.ID, 0, len(r.Consumers))
|
||||
func (r *BaseRouter[T]) PipelineIDs() []pipeline.ID {
|
||||
ids := make([]pipeline.ID, 0, len(r.Consumers))
|
||||
for id := range r.Consumers {
|
||||
ids = append(ids, id)
|
||||
}
|
||||
return ids
|
||||
}
|
||||
|
||||
func (r *BaseRouter[T]) Consumer(pipelineIDs ...component.ID) (T, error) {
|
||||
func (r *BaseRouter[T]) Consumer(pipelineIDs ...pipeline.ID) (T, error) {
|
||||
var ret T
|
||||
if len(pipelineIDs) == 0 {
|
||||
return ret, fmt.Errorf("missing consumers")
|
||||
|
|
|
|||
|
|
@ -8,17 +8,17 @@ import (
|
|||
|
||||
"go.uber.org/multierr"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/connector/internal"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/internal/fanoutconsumer"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// LogsRouterAndConsumer feeds the first consumer.Logs in each of the specified pipelines.
|
||||
type LogsRouterAndConsumer interface {
|
||||
consumer.Logs
|
||||
Consumer(...component.ID) (consumer.Logs, error)
|
||||
PipelineIDs() []component.ID
|
||||
Consumer(...pipeline.ID) (consumer.Logs, error)
|
||||
PipelineIDs() []pipeline.ID
|
||||
privateFunc()
|
||||
}
|
||||
|
||||
|
|
@ -27,7 +27,7 @@ type logsRouter struct {
|
|||
internal.BaseRouter[consumer.Logs]
|
||||
}
|
||||
|
||||
func NewLogsRouter(cm map[component.ID]consumer.Logs) LogsRouterAndConsumer {
|
||||
func NewLogsRouter(cm map[pipeline.ID]consumer.Logs) LogsRouterAndConsumer {
|
||||
consumers := make([]consumer.Logs, 0, len(cm))
|
||||
for _, cons := range cm {
|
||||
consumers = append(consumers, cons)
|
||||
|
|
@ -38,15 +38,15 @@ func NewLogsRouter(cm map[component.ID]consumer.Logs) LogsRouterAndConsumer {
|
|||
}
|
||||
}
|
||||
|
||||
func (r *logsRouter) PipelineIDs() []component.ID {
|
||||
ids := make([]component.ID, 0, len(r.Consumers))
|
||||
func (r *logsRouter) PipelineIDs() []pipeline.ID {
|
||||
ids := make([]pipeline.ID, 0, len(r.Consumers))
|
||||
for id := range r.Consumers {
|
||||
ids = append(ids, id)
|
||||
}
|
||||
return ids
|
||||
}
|
||||
|
||||
func (r *logsRouter) Consumer(pipelineIDs ...component.ID) (consumer.Logs, error) {
|
||||
func (r *logsRouter) Consumer(pipelineIDs ...pipeline.ID) (consumer.Logs, error) {
|
||||
if len(pipelineIDs) == 0 {
|
||||
return nil, fmt.Errorf("missing consumers")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,11 +12,11 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumertest"
|
||||
"go.opentelemetry.io/collector/pdata/plog"
|
||||
"go.opentelemetry.io/collector/pdata/testdata"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
type mutatingLogsSink struct {
|
||||
|
|
@ -43,13 +43,13 @@ func TestLogsRouterMultiplexing(t *testing.T) {
|
|||
|
||||
func fuzzLogs(numIDs, numCons, numLogs int) func(*testing.T) {
|
||||
return func(t *testing.T) {
|
||||
allIDs := make([]component.ID, 0, numCons)
|
||||
allIDs := make([]pipeline.ID, 0, numCons)
|
||||
allCons := make([]consumer.Logs, 0, numCons)
|
||||
allConsMap := make(map[component.ID]consumer.Logs)
|
||||
allConsMap := make(map[pipeline.ID]consumer.Logs)
|
||||
|
||||
// If any consumer is mutating, the router must report mutating
|
||||
for i := 0; i < numCons; i++ {
|
||||
allIDs = append(allIDs, component.MustNewIDWithName("sink", strconv.Itoa(numCons)))
|
||||
allIDs = append(allIDs, pipeline.MustNewIDWithName("sink", strconv.Itoa(numCons)))
|
||||
// Random chance for each consumer to be mutating
|
||||
if (numCons+numLogs+i)%4 == 0 {
|
||||
allCons = append(allCons, &mutatingLogsSink{LogsSink: new(consumertest.LogsSink)})
|
||||
|
|
@ -64,11 +64,11 @@ func fuzzLogs(numIDs, numCons, numLogs int) func(*testing.T) {
|
|||
|
||||
// Keep track of how many logs each consumer should receive.
|
||||
// This will be validated after every call to RouteLogs.
|
||||
expected := make(map[component.ID]int, numCons)
|
||||
expected := make(map[pipeline.ID]int, numCons)
|
||||
|
||||
for i := 0; i < numLogs; i++ {
|
||||
// Build a random set of ids (no duplicates)
|
||||
randCons := make(map[component.ID]bool, numIDs)
|
||||
randCons := make(map[pipeline.ID]bool, numIDs)
|
||||
for j := 0; j < numIDs; j++ {
|
||||
// This number should be pretty random and less than numCons
|
||||
conNum := (numCons + numIDs + i + j) % numCons
|
||||
|
|
@ -76,7 +76,7 @@ func fuzzLogs(numIDs, numCons, numLogs int) func(*testing.T) {
|
|||
}
|
||||
|
||||
// Convert to slice, update expectations
|
||||
conIDs := make([]component.ID, 0, len(randCons))
|
||||
conIDs := make([]pipeline.ID, 0, len(randCons))
|
||||
for id := range randCons {
|
||||
conIDs = append(conIDs, id)
|
||||
expected[id]++
|
||||
|
|
@ -109,16 +109,16 @@ func TestLogsRouterConsumers(t *testing.T) {
|
|||
ctx := context.Background()
|
||||
ld := testdata.GenerateLogs(1)
|
||||
|
||||
fooID := component.MustNewID("foo")
|
||||
barID := component.MustNewID("bar")
|
||||
fooID := pipeline.MustNewID("foo")
|
||||
barID := pipeline.MustNewID("bar")
|
||||
|
||||
foo := new(consumertest.LogsSink)
|
||||
bar := new(consumertest.LogsSink)
|
||||
r := NewLogsRouter(map[component.ID]consumer.Logs{fooID: foo, barID: bar})
|
||||
r := NewLogsRouter(map[pipeline.ID]consumer.Logs{fooID: foo, barID: bar})
|
||||
|
||||
rcs := r.PipelineIDs()
|
||||
assert.Len(t, rcs, 2)
|
||||
assert.ElementsMatch(t, []component.ID{fooID, barID}, rcs)
|
||||
assert.ElementsMatch(t, []pipeline.ID{fooID, barID}, rcs)
|
||||
|
||||
assert.Empty(t, foo.AllLogs())
|
||||
assert.Empty(t, bar.AllLogs())
|
||||
|
|
@ -151,7 +151,7 @@ func TestLogsRouterConsumers(t *testing.T) {
|
|||
assert.Nil(t, none)
|
||||
require.Error(t, err)
|
||||
|
||||
fake, err := r.Consumer(component.MustNewID("fake"))
|
||||
fake, err := r.Consumer(pipeline.MustNewID("fake"))
|
||||
assert.Nil(t, fake)
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,17 +4,17 @@
|
|||
package connector // import "go.opentelemetry.io/collector/connector"
|
||||
|
||||
import (
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/connector/internal"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/internal/fanoutconsumer"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// MetricsRouterAndConsumer feeds the first consumer.Metrics in each of the specified pipelines.
|
||||
type MetricsRouterAndConsumer interface {
|
||||
consumer.Metrics
|
||||
Consumer(...component.ID) (consumer.Metrics, error)
|
||||
PipelineIDs() []component.ID
|
||||
Consumer(...pipeline.ID) (consumer.Metrics, error)
|
||||
PipelineIDs() []pipeline.ID
|
||||
privateFunc()
|
||||
}
|
||||
|
||||
|
|
@ -23,7 +23,7 @@ type metricsRouter struct {
|
|||
internal.BaseRouter[consumer.Metrics]
|
||||
}
|
||||
|
||||
func NewMetricsRouter(cm map[component.ID]consumer.Metrics) MetricsRouterAndConsumer {
|
||||
func NewMetricsRouter(cm map[pipeline.ID]consumer.Metrics) MetricsRouterAndConsumer {
|
||||
consumers := make([]consumer.Metrics, 0, len(cm))
|
||||
for _, cons := range cm {
|
||||
consumers = append(consumers, cons)
|
||||
|
|
|
|||
|
|
@ -12,11 +12,11 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumertest"
|
||||
"go.opentelemetry.io/collector/pdata/pmetric"
|
||||
"go.opentelemetry.io/collector/pdata/testdata"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
type mutatingMetricsSink struct {
|
||||
|
|
@ -43,13 +43,13 @@ func TestMetricsRouterMultiplexing(t *testing.T) {
|
|||
|
||||
func fuzzMetrics(numIDs, numCons, numMetrics int) func(*testing.T) {
|
||||
return func(t *testing.T) {
|
||||
allIDs := make([]component.ID, 0, numCons)
|
||||
allIDs := make([]pipeline.ID, 0, numCons)
|
||||
allCons := make([]consumer.Metrics, 0, numCons)
|
||||
allConsMap := make(map[component.ID]consumer.Metrics)
|
||||
allConsMap := make(map[pipeline.ID]consumer.Metrics)
|
||||
|
||||
// If any consumer is mutating, the router must report mutating
|
||||
for i := 0; i < numCons; i++ {
|
||||
allIDs = append(allIDs, component.MustNewIDWithName("sink", strconv.Itoa(numCons)))
|
||||
allIDs = append(allIDs, pipeline.MustNewIDWithName("sink", strconv.Itoa(numCons)))
|
||||
// Random chance for each consumer to be mutating
|
||||
if (numCons+numMetrics+i)%4 == 0 {
|
||||
allCons = append(allCons, &mutatingMetricsSink{MetricsSink: new(consumertest.MetricsSink)})
|
||||
|
|
@ -64,11 +64,11 @@ func fuzzMetrics(numIDs, numCons, numMetrics int) func(*testing.T) {
|
|||
|
||||
// Keep track of how many logs each consumer should receive.
|
||||
// This will be validated after every call to RouteMetrics.
|
||||
expected := make(map[component.ID]int, numCons)
|
||||
expected := make(map[pipeline.ID]int, numCons)
|
||||
|
||||
for i := 0; i < numMetrics; i++ {
|
||||
// Build a random set of ids (no duplicates)
|
||||
randCons := make(map[component.ID]bool, numIDs)
|
||||
randCons := make(map[pipeline.ID]bool, numIDs)
|
||||
for j := 0; j < numIDs; j++ {
|
||||
// This number should be pretty random and less than numCons
|
||||
conNum := (numCons + numIDs + i + j) % numCons
|
||||
|
|
@ -76,7 +76,7 @@ func fuzzMetrics(numIDs, numCons, numMetrics int) func(*testing.T) {
|
|||
}
|
||||
|
||||
// Convert to slice, update expectations
|
||||
conIDs := make([]component.ID, 0, len(randCons))
|
||||
conIDs := make([]pipeline.ID, 0, len(randCons))
|
||||
for id := range randCons {
|
||||
conIDs = append(conIDs, id)
|
||||
expected[id]++
|
||||
|
|
@ -109,16 +109,16 @@ func TestMetricsRouterConsumers(t *testing.T) {
|
|||
ctx := context.Background()
|
||||
md := testdata.GenerateMetrics(1)
|
||||
|
||||
fooID := component.MustNewID("foo")
|
||||
barID := component.MustNewID("bar")
|
||||
fooID := pipeline.MustNewID("foo")
|
||||
barID := pipeline.MustNewID("bar")
|
||||
|
||||
foo := new(consumertest.MetricsSink)
|
||||
bar := new(consumertest.MetricsSink)
|
||||
r := NewMetricsRouter(map[component.ID]consumer.Metrics{fooID: foo, barID: bar})
|
||||
r := NewMetricsRouter(map[pipeline.ID]consumer.Metrics{fooID: foo, barID: bar})
|
||||
|
||||
rcs := r.PipelineIDs()
|
||||
assert.Len(t, rcs, 2)
|
||||
assert.ElementsMatch(t, []component.ID{fooID, barID}, rcs)
|
||||
assert.ElementsMatch(t, []pipeline.ID{fooID, barID}, rcs)
|
||||
|
||||
assert.Empty(t, foo.AllMetrics())
|
||||
assert.Empty(t, bar.AllMetrics())
|
||||
|
|
@ -151,7 +151,7 @@ func TestMetricsRouterConsumers(t *testing.T) {
|
|||
assert.Nil(t, none)
|
||||
require.Error(t, err)
|
||||
|
||||
fake, err := r.Consumer(component.MustNewID("fake"))
|
||||
fake, err := r.Consumer(pipeline.MustNewID("fake"))
|
||||
assert.Nil(t, fake)
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,17 +4,17 @@
|
|||
package connector // import "go.opentelemetry.io/collector/connector"
|
||||
|
||||
import (
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/connector/internal"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/internal/fanoutconsumer"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// TracesRouterAndConsumer feeds the first consumer.Traces in each of the specified pipelines.
|
||||
type TracesRouterAndConsumer interface {
|
||||
consumer.Traces
|
||||
Consumer(...component.ID) (consumer.Traces, error)
|
||||
PipelineIDs() []component.ID
|
||||
Consumer(...pipeline.ID) (consumer.Traces, error)
|
||||
PipelineIDs() []pipeline.ID
|
||||
privateFunc()
|
||||
}
|
||||
|
||||
|
|
@ -23,7 +23,7 @@ type tracesRouter struct {
|
|||
internal.BaseRouter[consumer.Traces]
|
||||
}
|
||||
|
||||
func NewTracesRouter(cm map[component.ID]consumer.Traces) TracesRouterAndConsumer {
|
||||
func NewTracesRouter(cm map[pipeline.ID]consumer.Traces) TracesRouterAndConsumer {
|
||||
consumers := make([]consumer.Traces, 0, len(cm))
|
||||
for _, cons := range cm {
|
||||
consumers = append(consumers, cons)
|
||||
|
|
|
|||
|
|
@ -12,11 +12,11 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumertest"
|
||||
"go.opentelemetry.io/collector/pdata/ptrace"
|
||||
"go.opentelemetry.io/collector/pdata/testdata"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
type mutatingTracesSink struct {
|
||||
|
|
@ -43,13 +43,13 @@ func TestTracesRouterMultiplexing(t *testing.T) {
|
|||
|
||||
func fuzzTraces(numIDs, numCons, numTraces int) func(*testing.T) {
|
||||
return func(t *testing.T) {
|
||||
allIDs := make([]component.ID, 0, numCons)
|
||||
allIDs := make([]pipeline.ID, 0, numCons)
|
||||
allCons := make([]consumer.Traces, 0, numCons)
|
||||
allConsMap := make(map[component.ID]consumer.Traces)
|
||||
allConsMap := make(map[pipeline.ID]consumer.Traces)
|
||||
|
||||
// If any consumer is mutating, the router must report mutating
|
||||
for i := 0; i < numCons; i++ {
|
||||
allIDs = append(allIDs, component.MustNewIDWithName("sink", strconv.Itoa(numCons)))
|
||||
allIDs = append(allIDs, pipeline.MustNewIDWithName("sink", strconv.Itoa(numCons)))
|
||||
// Random chance for each consumer to be mutating
|
||||
if (numCons+numTraces+i)%4 == 0 {
|
||||
allCons = append(allCons, &mutatingTracesSink{TracesSink: new(consumertest.TracesSink)})
|
||||
|
|
@ -64,11 +64,11 @@ func fuzzTraces(numIDs, numCons, numTraces int) func(*testing.T) {
|
|||
|
||||
// Keep track of how many logs each consumer should receive.
|
||||
// This will be validated after every call to RouteTraces.
|
||||
expected := make(map[component.ID]int, numCons)
|
||||
expected := make(map[pipeline.ID]int, numCons)
|
||||
|
||||
for i := 0; i < numTraces; i++ {
|
||||
// Build a random set of ids (no duplicates)
|
||||
randCons := make(map[component.ID]bool, numIDs)
|
||||
randCons := make(map[pipeline.ID]bool, numIDs)
|
||||
for j := 0; j < numIDs; j++ {
|
||||
// This number should be pretty random and less than numCons
|
||||
conNum := (numCons + numIDs + i + j) % numCons
|
||||
|
|
@ -76,7 +76,7 @@ func fuzzTraces(numIDs, numCons, numTraces int) func(*testing.T) {
|
|||
}
|
||||
|
||||
// Convert to slice, update expectations
|
||||
conIDs := make([]component.ID, 0, len(randCons))
|
||||
conIDs := make([]pipeline.ID, 0, len(randCons))
|
||||
for id := range randCons {
|
||||
conIDs = append(conIDs, id)
|
||||
expected[id]++
|
||||
|
|
@ -109,16 +109,16 @@ func TestTracesRouterConsumer(t *testing.T) {
|
|||
ctx := context.Background()
|
||||
td := testdata.GenerateTraces(1)
|
||||
|
||||
fooID := component.MustNewID("foo")
|
||||
barID := component.MustNewID("bar")
|
||||
fooID := pipeline.MustNewID("foo")
|
||||
barID := pipeline.MustNewID("bar")
|
||||
|
||||
foo := new(consumertest.TracesSink)
|
||||
bar := new(consumertest.TracesSink)
|
||||
r := NewTracesRouter(map[component.ID]consumer.Traces{fooID: foo, barID: bar})
|
||||
r := NewTracesRouter(map[pipeline.ID]consumer.Traces{fooID: foo, barID: bar})
|
||||
|
||||
rcs := r.PipelineIDs()
|
||||
assert.Len(t, rcs, 2)
|
||||
assert.ElementsMatch(t, []component.ID{fooID, barID}, rcs)
|
||||
assert.ElementsMatch(t, []pipeline.ID{fooID, barID}, rcs)
|
||||
|
||||
assert.Empty(t, foo.AllTraces())
|
||||
assert.Empty(t, bar.AllTraces())
|
||||
|
|
@ -151,7 +151,7 @@ func TestTracesRouterConsumer(t *testing.T) {
|
|||
assert.Nil(t, none)
|
||||
require.Error(t, err)
|
||||
|
||||
fake, err := r.Consumer(component.MustNewID("fake"))
|
||||
fake, err := r.Consumer(pipeline.MustNewID("fake"))
|
||||
assert.Nil(t, fake)
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,13 +32,16 @@ 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/component/componentprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configretry v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer/consumerprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer/consumertest v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/exporter/exporterprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/extension v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/extension/experimental/storage v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver/receiverprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
|
|
@ -87,3 +90,9 @@ replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/co
|
|||
replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receiver/receiverprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/exporter/exporterprofiles => ../exporterprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ 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/pipeline"
|
||||
)
|
||||
|
||||
type ObsrepSenderFactory = func(obsrep *ObsReport) RequestSender
|
||||
|
|
@ -35,7 +36,7 @@ type BaseExporter struct {
|
|||
component.StartFunc
|
||||
component.ShutdownFunc
|
||||
|
||||
Signal component.DataType
|
||||
Signal pipeline.Signal
|
||||
|
||||
BatchMergeFunc exporterbatcher.BatchMergeFunc[internal.Request]
|
||||
BatchMergeSplitfunc exporterbatcher.BatchMergeSplitFunc[internal.Request]
|
||||
|
|
@ -66,8 +67,8 @@ type BaseExporter struct {
|
|||
BatcherOpts []BatcherOption
|
||||
}
|
||||
|
||||
func NewBaseExporter(set exporter.Settings, signal component.DataType, osf ObsrepSenderFactory, options ...Option) (*BaseExporter, error) {
|
||||
obsReport, err := NewExporter(ObsReportSettings{ExporterID: set.ID, ExporterCreateSettings: set, DataType: signal})
|
||||
func NewBaseExporter(set exporter.Settings, signal pipeline.Signal, osf ObsrepSenderFactory, options ...Option) (*BaseExporter, error) {
|
||||
obsReport, err := NewExporter(ObsReportSettings{ExporterID: set.ID, ExporterCreateSettings: set, Signal: signal})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -105,7 +106,7 @@ func NewBaseExporter(set exporter.Settings, signal component.DataType, osf Obsre
|
|||
|
||||
if be.QueueCfg.Enabled {
|
||||
set := exporterqueue.Settings{
|
||||
DataType: be.Signal,
|
||||
Signal: be.Signal,
|
||||
ExporterSettings: be.Set,
|
||||
}
|
||||
be.QueueSender = NewQueueSender(be.QueueFactory(context.Background(), set, be.QueueCfg), be.Set, be.QueueCfg.NumConsumers, be.ExportFailureMessage, be.Obsrep)
|
||||
|
|
@ -234,7 +235,7 @@ func WithQueue(config QueueConfig) Option {
|
|||
Unmarshaler: o.Unmarshaler,
|
||||
})
|
||||
q := qf(context.Background(), exporterqueue.Settings{
|
||||
DataType: o.Signal,
|
||||
Signal: o.Signal,
|
||||
ExporterSettings: o.Set,
|
||||
}, exporterqueue.Config{
|
||||
Enabled: config.Enabled,
|
||||
|
|
|
|||
|
|
@ -19,11 +19,12 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exporterqueue"
|
||||
"go.opentelemetry.io/collector/exporter/exportertest"
|
||||
"go.opentelemetry.io/collector/exporter/internal"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
var (
|
||||
defaultType = component.MustNewType("test")
|
||||
defaultDataType = component.DataTypeMetrics
|
||||
defaultSignal = pipeline.SignalMetrics
|
||||
defaultID = component.NewID(defaultType)
|
||||
defaultSettings = func() exporter.Settings {
|
||||
set := exportertest.NewNopSettings()
|
||||
|
|
@ -37,7 +38,7 @@ func newNoopObsrepSender(*ObsReport) RequestSender {
|
|||
}
|
||||
|
||||
func TestBaseExporter(t *testing.T) {
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender)
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost()))
|
||||
require.NoError(t, be.Shutdown(context.Background()))
|
||||
|
|
@ -46,7 +47,7 @@ func TestBaseExporter(t *testing.T) {
|
|||
func TestBaseExporterWithOptions(t *testing.T) {
|
||||
want := errors.New("my error")
|
||||
be, err := NewBaseExporter(
|
||||
defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithStart(func(context.Context, component.Host) error { return want }),
|
||||
WithShutdown(func(context.Context) error { return want }),
|
||||
WithTimeout(NewDefaultTimeoutConfig()),
|
||||
|
|
@ -57,16 +58,16 @@ func TestBaseExporterWithOptions(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestQueueOptionsWithRequestExporter(t *testing.T) {
|
||||
bs, err := NewBaseExporter(exportertest.NewNopSettings(), defaultDataType, newNoopObsrepSender,
|
||||
bs, err := NewBaseExporter(exportertest.NewNopSettings(), defaultSignal, newNoopObsrepSender,
|
||||
WithRetry(configretry.NewDefaultBackOffConfig()))
|
||||
require.NoError(t, err)
|
||||
require.Nil(t, bs.Marshaler)
|
||||
require.Nil(t, bs.Unmarshaler)
|
||||
_, err = NewBaseExporter(exportertest.NewNopSettings(), defaultDataType, newNoopObsrepSender,
|
||||
_, err = NewBaseExporter(exportertest.NewNopSettings(), defaultSignal, newNoopObsrepSender,
|
||||
WithRetry(configretry.NewDefaultBackOffConfig()), WithQueue(NewDefaultQueueConfig()))
|
||||
require.Error(t, err)
|
||||
|
||||
_, err = NewBaseExporter(exportertest.NewNopSettings(), defaultDataType, newNoopObsrepSender,
|
||||
_, err = NewBaseExporter(exportertest.NewNopSettings(), defaultSignal, newNoopObsrepSender,
|
||||
WithMarshaler(mockRequestMarshaler), WithUnmarshaler(mockRequestUnmarshaler(&mockRequest{})),
|
||||
WithRetry(configretry.NewDefaultBackOffConfig()),
|
||||
WithRequestQueue(exporterqueue.NewDefaultConfig(), exporterqueue.NewMemoryQueueFactory[internal.Request]()))
|
||||
|
|
@ -79,7 +80,7 @@ func TestBaseExporterLogging(t *testing.T) {
|
|||
set.Logger = zap.New(logger)
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
rCfg.Enabled = false
|
||||
bs, err := NewBaseExporter(set, defaultDataType, newNoopObsrepSender, WithRetry(rCfg))
|
||||
bs, err := NewBaseExporter(set, defaultSignal, newNoopObsrepSender, WithRetry(rCfg))
|
||||
require.NoError(t, err)
|
||||
sendErr := bs.Send(context.Background(), newErrorRequest())
|
||||
require.Error(t, sendErr)
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ func TestBatchSender_Disabled(t *testing.T) {
|
|||
cfg := exporterbatcher.NewDefaultConfig()
|
||||
cfg.Enabled = false
|
||||
cfg.MaxSizeItems = 5
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithBatcher(cfg, WithRequestBatchFuncs(fakeBatchMergeFunc, fakeBatchMergeSplitFunc)))
|
||||
require.NotNil(t, be)
|
||||
require.NoError(t, err)
|
||||
|
|
@ -259,7 +259,7 @@ func TestBatchSender_InvalidMergeSplitFunc(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestBatchSender_PostShutdown(t *testing.T) {
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithBatcher(exporterbatcher.NewDefaultConfig(), WithRequestBatchFuncs(fakeBatchMergeFunc,
|
||||
fakeBatchMergeSplitFunc)))
|
||||
require.NotNil(t, be)
|
||||
|
|
@ -322,7 +322,7 @@ func TestBatchSender_ConcurrencyLimitReached(t *testing.T) {
|
|||
t.Run(tt.name, func(t *testing.T) {
|
||||
qCfg := exporterqueue.NewDefaultConfig()
|
||||
qCfg.NumConsumers = 2
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithBatcher(tt.batcherCfg, WithRequestBatchFuncs(fakeBatchMergeFunc, fakeBatchMergeSplitFunc)),
|
||||
WithRequestQueue(qCfg, exporterqueue.NewMemoryQueueFactory[internal.Request]()))
|
||||
require.NotNil(t, be)
|
||||
|
|
@ -377,7 +377,7 @@ func TestBatchSender_ConcurrencyLimitReached(t *testing.T) {
|
|||
func TestBatchSender_BatchBlocking(t *testing.T) {
|
||||
bCfg := exporterbatcher.NewDefaultConfig()
|
||||
bCfg.MinSizeItems = 3
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithBatcher(bCfg, WithRequestBatchFuncs(fakeBatchMergeFunc, fakeBatchMergeSplitFunc)))
|
||||
require.NotNil(t, be)
|
||||
require.NoError(t, err)
|
||||
|
|
@ -407,7 +407,7 @@ func TestBatchSender_BatchBlocking(t *testing.T) {
|
|||
func TestBatchSender_BatchCancelled(t *testing.T) {
|
||||
bCfg := exporterbatcher.NewDefaultConfig()
|
||||
bCfg.MinSizeItems = 2
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithBatcher(bCfg, WithRequestBatchFuncs(fakeBatchMergeFunc, fakeBatchMergeSplitFunc)))
|
||||
require.NotNil(t, be)
|
||||
require.NoError(t, err)
|
||||
|
|
@ -442,7 +442,7 @@ func TestBatchSender_BatchCancelled(t *testing.T) {
|
|||
func TestBatchSender_DrainActiveRequests(t *testing.T) {
|
||||
bCfg := exporterbatcher.NewDefaultConfig()
|
||||
bCfg.MinSizeItems = 2
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithBatcher(bCfg, WithRequestBatchFuncs(fakeBatchMergeFunc, fakeBatchMergeSplitFunc)))
|
||||
require.NotNil(t, be)
|
||||
require.NoError(t, err)
|
||||
|
|
@ -505,7 +505,7 @@ func TestBatchSender_WithBatcherOption(t *testing.T) {
|
|||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender, tt.opts...)
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender, tt.opts...)
|
||||
if tt.expectedErr {
|
||||
assert.Nil(t, be)
|
||||
assert.Error(t, err)
|
||||
|
|
@ -518,7 +518,7 @@ func TestBatchSender_WithBatcherOption(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestBatchSender_UnstartedShutdown(t *testing.T) {
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithBatcher(exporterbatcher.NewDefaultConfig(), WithRequestBatchFuncs(fakeBatchMergeFunc, fakeBatchMergeSplitFunc)))
|
||||
require.NoError(t, err)
|
||||
|
||||
|
|
@ -542,7 +542,7 @@ func TestBatchSender_ShutdownDeadlock(t *testing.T) {
|
|||
|
||||
bCfg := exporterbatcher.NewDefaultConfig()
|
||||
bCfg.FlushTimeout = 10 * time.Minute // high timeout to avoid the timeout to trigger
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithBatcher(bCfg, WithRequestBatchFuncs(blockedBatchMergeFunc, fakeBatchMergeSplitFunc)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost()))
|
||||
|
|
@ -578,7 +578,7 @@ func TestBatchSenderWithTimeout(t *testing.T) {
|
|||
bCfg.MinSizeItems = 10
|
||||
tCfg := NewDefaultTimeoutConfig()
|
||||
tCfg.Timeout = 50 * time.Millisecond
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithBatcher(bCfg, WithRequestBatchFuncs(fakeBatchMergeFunc, fakeBatchMergeSplitFunc)),
|
||||
WithTimeout(tCfg))
|
||||
require.NoError(t, err)
|
||||
|
|
@ -637,7 +637,7 @@ func TestBatchSenderTimerResetNoConflict(t *testing.T) {
|
|||
bCfg := exporterbatcher.NewDefaultConfig()
|
||||
bCfg.MinSizeItems = 8
|
||||
bCfg.FlushTimeout = 50 * time.Millisecond
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithBatcher(bCfg, WithRequestBatchFuncs(delayBatchMergeFunc, fakeBatchMergeSplitFunc)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost()))
|
||||
|
|
@ -668,7 +668,7 @@ func TestBatchSenderTimerFlush(t *testing.T) {
|
|||
bCfg := exporterbatcher.NewDefaultConfig()
|
||||
bCfg.MinSizeItems = 8
|
||||
bCfg.FlushTimeout = 100 * time.Millisecond
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender,
|
||||
WithBatcher(bCfg, WithRequestBatchFuncs(fakeBatchMergeFunc, fakeBatchMergeSplitFunc)))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost()))
|
||||
|
|
@ -705,7 +705,7 @@ func TestBatchSenderTimerFlush(t *testing.T) {
|
|||
}
|
||||
|
||||
func queueBatchExporter(t *testing.T, batchOption Option) *BaseExporter {
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender, batchOption,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender, batchOption,
|
||||
WithRequestQueue(exporterqueue.NewDefaultConfig(), exporterqueue.NewMemoryQueueFactory[internal.Request]()))
|
||||
require.NotNil(t, be)
|
||||
require.NoError(t, err)
|
||||
|
|
|
|||
|
|
@ -14,13 +14,14 @@ import (
|
|||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/exporter"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadata"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// ObsReport is a helper to add observability to an exporter.
|
||||
type ObsReport struct {
|
||||
spanNamePrefix string
|
||||
tracer trace.Tracer
|
||||
DataType component.DataType
|
||||
Signal pipeline.Signal
|
||||
|
||||
otelAttrs []attribute.KeyValue
|
||||
TelemetryBuilder *metadata.TelemetryBuilder
|
||||
|
|
@ -30,7 +31,7 @@ type ObsReport struct {
|
|||
type ObsReportSettings struct {
|
||||
ExporterID component.ID
|
||||
ExporterCreateSettings exporter.Settings
|
||||
DataType component.DataType
|
||||
Signal pipeline.Signal
|
||||
}
|
||||
|
||||
func NewExporter(cfg ObsReportSettings) (*ObsReport, error) {
|
||||
|
|
@ -42,7 +43,7 @@ func NewExporter(cfg ObsReportSettings) (*ObsReport, error) {
|
|||
return &ObsReport{
|
||||
spanNamePrefix: ExporterPrefix + cfg.ExporterID.String(),
|
||||
tracer: cfg.ExporterCreateSettings.TracerProvider.Tracer(cfg.ExporterID.String()),
|
||||
DataType: cfg.DataType,
|
||||
Signal: cfg.Signal,
|
||||
otelAttrs: []attribute.KeyValue{
|
||||
attribute.String(ExporterKey, cfg.ExporterID.String()),
|
||||
},
|
||||
|
|
@ -60,7 +61,7 @@ func (or *ObsReport) StartTracesOp(ctx context.Context) context.Context {
|
|||
// EndTracesOp completes the export operation that was started with startTracesOp.
|
||||
func (or *ObsReport) EndTracesOp(ctx context.Context, numSpans int, err error) {
|
||||
numSent, numFailedToSend := toNumItems(numSpans, err)
|
||||
or.recordMetrics(context.WithoutCancel(ctx), component.DataTypeTraces, numSent, numFailedToSend)
|
||||
or.recordMetrics(context.WithoutCancel(ctx), pipeline.SignalTraces, numSent, numFailedToSend)
|
||||
endSpan(ctx, err, numSent, numFailedToSend, SentSpansKey, FailedToSendSpansKey)
|
||||
}
|
||||
|
||||
|
|
@ -77,7 +78,7 @@ func (or *ObsReport) StartMetricsOp(ctx context.Context) context.Context {
|
|||
// If needed, report your use case in https://github.com/open-telemetry/opentelemetry-collector/issues/10592.
|
||||
func (or *ObsReport) EndMetricsOp(ctx context.Context, numMetricPoints int, err error) {
|
||||
numSent, numFailedToSend := toNumItems(numMetricPoints, err)
|
||||
or.recordMetrics(context.WithoutCancel(ctx), component.DataTypeMetrics, numSent, numFailedToSend)
|
||||
or.recordMetrics(context.WithoutCancel(ctx), pipeline.SignalMetrics, numSent, numFailedToSend)
|
||||
endSpan(ctx, err, numSent, numFailedToSend, SentMetricPointsKey, FailedToSendMetricPointsKey)
|
||||
}
|
||||
|
||||
|
|
@ -91,7 +92,7 @@ func (or *ObsReport) StartLogsOp(ctx context.Context) context.Context {
|
|||
// EndLogsOp completes the export operation that was started with startLogsOp.
|
||||
func (or *ObsReport) EndLogsOp(ctx context.Context, numLogRecords int, err error) {
|
||||
numSent, numFailedToSend := toNumItems(numLogRecords, err)
|
||||
or.recordMetrics(context.WithoutCancel(ctx), component.DataTypeLogs, numSent, numFailedToSend)
|
||||
or.recordMetrics(context.WithoutCancel(ctx), pipeline.SignalLogs, numSent, numFailedToSend)
|
||||
endSpan(ctx, err, numSent, numFailedToSend, SentLogRecordsKey, FailedToSendLogRecordsKey)
|
||||
}
|
||||
|
||||
|
|
@ -103,16 +104,16 @@ func (or *ObsReport) startOp(ctx context.Context, operationSuffix string) contex
|
|||
return ctx
|
||||
}
|
||||
|
||||
func (or *ObsReport) recordMetrics(ctx context.Context, dataType component.DataType, sent, failed int64) {
|
||||
func (or *ObsReport) recordMetrics(ctx context.Context, signal pipeline.Signal, sent, failed int64) {
|
||||
var sentMeasure, failedMeasure metric.Int64Counter
|
||||
switch dataType {
|
||||
case component.DataTypeTraces:
|
||||
switch signal {
|
||||
case pipeline.SignalTraces:
|
||||
sentMeasure = or.TelemetryBuilder.ExporterSentSpans
|
||||
failedMeasure = or.TelemetryBuilder.ExporterSendFailedSpans
|
||||
case component.DataTypeMetrics:
|
||||
case pipeline.SignalMetrics:
|
||||
sentMeasure = or.TelemetryBuilder.ExporterSentMetricPoints
|
||||
failedMeasure = or.TelemetryBuilder.ExporterSendFailedMetricPoints
|
||||
case component.DataTypeLogs:
|
||||
case pipeline.SignalLogs:
|
||||
sentMeasure = or.TelemetryBuilder.ExporterSentLogRecords
|
||||
failedMeasure = or.TelemetryBuilder.ExporterSendFailedLogRecords
|
||||
}
|
||||
|
|
@ -143,14 +144,14 @@ func toNumItems(numExportedItems int, err error) (int64, int64) {
|
|||
return int64(numExportedItems), 0
|
||||
}
|
||||
|
||||
func (or *ObsReport) RecordEnqueueFailure(ctx context.Context, dataType component.DataType, failed int64) {
|
||||
func (or *ObsReport) RecordEnqueueFailure(ctx context.Context, signal pipeline.Signal, failed int64) {
|
||||
var enqueueFailedMeasure metric.Int64Counter
|
||||
switch dataType {
|
||||
case component.DataTypeTraces:
|
||||
switch signal {
|
||||
case pipeline.SignalTraces:
|
||||
enqueueFailedMeasure = or.TelemetryBuilder.ExporterEnqueueFailedSpans
|
||||
case component.DataTypeMetrics:
|
||||
case pipeline.SignalMetrics:
|
||||
enqueueFailedMeasure = or.TelemetryBuilder.ExporterEnqueueFailedMetricPoints
|
||||
case component.DataTypeLogs:
|
||||
case pipeline.SignalLogs:
|
||||
enqueueFailedMeasure = or.TelemetryBuilder.ExporterEnqueueFailedLogRecords
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ func (qs *QueueSender) Start(ctx context.Context, host component.Host) error {
|
|||
return err
|
||||
}
|
||||
|
||||
dataTypeAttr := attribute.String(DataTypeKey, qs.obsrep.DataType.String())
|
||||
dataTypeAttr := attribute.String(DataTypeKey, qs.obsrep.Signal.String())
|
||||
return multierr.Append(
|
||||
qs.obsrep.TelemetryBuilder.InitExporterQueueSize(func() int64 { return int64(qs.queue.Size()) },
|
||||
metric.WithAttributeSet(attribute.NewSet(qs.traceAttribute, dataTypeAttr))),
|
||||
|
|
|
|||
|
|
@ -23,13 +23,14 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exportertest"
|
||||
"go.opentelemetry.io/collector/exporter/internal"
|
||||
"go.opentelemetry.io/collector/exporter/internal/queue"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
func TestQueuedRetry_StopWhileWaiting(t *testing.T) {
|
||||
qCfg := NewDefaultQueueConfig()
|
||||
qCfg.NumConsumers = 1
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newObservabilityConsumerSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newObservabilityConsumerSender,
|
||||
WithMarshaler(mockRequestMarshaler), WithUnmarshaler(mockRequestUnmarshaler(&mockRequest{})),
|
||||
WithRetry(rCfg), WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
|
|
@ -63,7 +64,7 @@ func TestQueuedRetry_DoNotPreserveCancellation(t *testing.T) {
|
|||
qCfg := NewDefaultQueueConfig()
|
||||
qCfg.NumConsumers = 1
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newObservabilityConsumerSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newObservabilityConsumerSender,
|
||||
WithMarshaler(mockRequestMarshaler), WithUnmarshaler(mockRequestUnmarshaler(&mockRequest{})),
|
||||
WithRetry(rCfg), WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
|
|
@ -95,7 +96,7 @@ func TestQueuedRetry_RejectOnFull(t *testing.T) {
|
|||
set := exportertest.NewNopSettings()
|
||||
logger, observed := observer.New(zap.ErrorLevel)
|
||||
set.Logger = zap.New(logger)
|
||||
be, err := NewBaseExporter(set, defaultDataType, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(set, defaultSignal, newNoopObsrepSender,
|
||||
WithMarshaler(mockRequestMarshaler), WithUnmarshaler(mockRequestUnmarshaler(&mockRequest{})),
|
||||
WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
|
|
@ -168,7 +169,7 @@ func TestQueuedRetryHappyPath(t *testing.T) {
|
|||
t.Cleanup(func() { require.NoError(t, tel.Shutdown(context.Background())) })
|
||||
|
||||
set := exporter.Settings{ID: defaultID, TelemetrySettings: tel.TelemetrySettings(), BuildInfo: component.NewDefaultBuildInfo()}
|
||||
be, err := NewBaseExporter(set, defaultDataType, newObservabilityConsumerSender, tt.queueOptions...)
|
||||
be, err := NewBaseExporter(set, defaultSignal, newObservabilityConsumerSender, tt.queueOptions...)
|
||||
require.NoError(t, err)
|
||||
ocs := be.ObsrepSender.(*observabilityConsumerSender)
|
||||
|
||||
|
|
@ -205,7 +206,7 @@ func TestQueuedRetryHappyPath(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestQueuedRetry_QueueMetricsReported(t *testing.T) {
|
||||
dataTypes := []component.DataType{component.DataTypeLogs, component.DataTypeTraces, component.DataTypeMetrics}
|
||||
dataTypes := []pipeline.Signal{pipeline.SignalLogs, pipeline.SignalTraces, pipeline.SignalMetrics}
|
||||
for _, dataType := range dataTypes {
|
||||
tt, err := componenttest.SetupTelemetry(defaultID)
|
||||
require.NoError(t, err)
|
||||
|
|
@ -299,7 +300,7 @@ func TestQueueRetryWithDisabledQueue(t *testing.T) {
|
|||
set := exportertest.NewNopSettings()
|
||||
logger, observed := observer.New(zap.ErrorLevel)
|
||||
set.Logger = zap.New(logger)
|
||||
be, err := NewBaseExporter(set, component.DataTypeLogs, newObservabilityConsumerSender, tt.queueOptions...)
|
||||
be, err := NewBaseExporter(set, pipeline.SignalLogs, newObservabilityConsumerSender, tt.queueOptions...)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost()))
|
||||
ocs := be.ObsrepSender.(*observabilityConsumerSender)
|
||||
|
|
@ -323,7 +324,7 @@ func TestQueueFailedRequestDropped(t *testing.T) {
|
|||
set := exportertest.NewNopSettings()
|
||||
logger, observed := observer.New(zap.ErrorLevel)
|
||||
set.Logger = zap.New(logger)
|
||||
be, err := NewBaseExporter(set, component.DataTypeLogs, newNoopObsrepSender,
|
||||
be, err := NewBaseExporter(set, pipeline.SignalLogs, newNoopObsrepSender,
|
||||
WithRequestQueue(exporterqueue.NewDefaultConfig(), exporterqueue.NewMemoryQueueFactory[internal.Request]()))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost()))
|
||||
|
|
@ -345,7 +346,7 @@ func TestQueuedRetryPersistenceEnabled(t *testing.T) {
|
|||
qCfg.StorageID = &storageID // enable persistence
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
set := exporter.Settings{ID: defaultID, TelemetrySettings: tt.TelemetrySettings(), BuildInfo: component.NewDefaultBuildInfo()}
|
||||
be, err := NewBaseExporter(set, defaultDataType, newObservabilityConsumerSender,
|
||||
be, err := NewBaseExporter(set, defaultSignal, newObservabilityConsumerSender,
|
||||
WithMarshaler(mockRequestMarshaler), WithUnmarshaler(mockRequestUnmarshaler(&mockRequest{})),
|
||||
WithRetry(rCfg), WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
|
|
@ -371,7 +372,7 @@ func TestQueuedRetryPersistenceEnabledStorageError(t *testing.T) {
|
|||
qCfg.StorageID = &storageID // enable persistence
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
set := exporter.Settings{ID: defaultID, TelemetrySettings: tt.TelemetrySettings(), BuildInfo: component.NewDefaultBuildInfo()}
|
||||
be, err := NewBaseExporter(set, defaultDataType, newObservabilityConsumerSender, WithMarshaler(mockRequestMarshaler),
|
||||
be, err := NewBaseExporter(set, defaultSignal, newObservabilityConsumerSender, WithMarshaler(mockRequestMarshaler),
|
||||
WithUnmarshaler(mockRequestUnmarshaler(&mockRequest{})), WithRetry(rCfg), WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
|
||||
|
|
@ -395,7 +396,7 @@ func TestQueuedRetryPersistentEnabled_NoDataLossOnShutdown(t *testing.T) {
|
|||
rCfg.MaxElapsedTime = 0 // retry infinitely so shutdown can be triggered
|
||||
|
||||
mockReq := newErrorRequest()
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender, WithMarshaler(mockRequestMarshaler),
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender, WithMarshaler(mockRequestMarshaler),
|
||||
WithUnmarshaler(mockRequestUnmarshaler(mockReq)), WithRetry(rCfg), WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
|
||||
|
|
@ -419,7 +420,7 @@ func TestQueuedRetryPersistentEnabled_NoDataLossOnShutdown(t *testing.T) {
|
|||
|
||||
// start the exporter again replacing the preserved mockRequest in the unmarshaler with a new one that doesn't fail.
|
||||
replacedReq := newMockRequest(1, nil)
|
||||
be, err = NewBaseExporter(defaultSettings, defaultDataType, newNoopObsrepSender, WithMarshaler(mockRequestMarshaler),
|
||||
be, err = NewBaseExporter(defaultSettings, defaultSignal, newNoopObsrepSender, WithMarshaler(mockRequestMarshaler),
|
||||
WithUnmarshaler(mockRequestUnmarshaler(replacedReq)), WithRetry(rCfg), WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, be.Start(context.Background(), host))
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import (
|
|||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zaptest/observer"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/component/componenttest"
|
||||
"go.opentelemetry.io/collector/config/configretry"
|
||||
"go.opentelemetry.io/collector/consumer/consumererror"
|
||||
|
|
@ -24,6 +23,7 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exportertest"
|
||||
"go.opentelemetry.io/collector/exporter/internal"
|
||||
"go.opentelemetry.io/collector/pdata/testdata"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
func mockRequestUnmarshaler(mr internal.Request) exporterqueue.Unmarshaler[internal.Request] {
|
||||
|
|
@ -40,7 +40,7 @@ func TestQueuedRetry_DropOnPermanentError(t *testing.T) {
|
|||
qCfg := NewDefaultQueueConfig()
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
mockR := newMockRequest(2, consumererror.NewPermanent(errors.New("bad data")))
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newObservabilityConsumerSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newObservabilityConsumerSender,
|
||||
WithMarshaler(mockRequestMarshaler), WithUnmarshaler(mockRequestUnmarshaler(mockR)), WithRetry(rCfg), WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
ocs := be.ObsrepSender.(*observabilityConsumerSender)
|
||||
|
|
@ -64,7 +64,7 @@ func TestQueuedRetry_DropOnNoRetry(t *testing.T) {
|
|||
qCfg := NewDefaultQueueConfig()
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
rCfg.Enabled = false
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newObservabilityConsumerSender, WithMarshaler(mockRequestMarshaler),
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newObservabilityConsumerSender, WithMarshaler(mockRequestMarshaler),
|
||||
WithUnmarshaler(mockRequestUnmarshaler(newMockRequest(2, errors.New("transient error")))),
|
||||
WithQueue(qCfg), WithRetry(rCfg))
|
||||
require.NoError(t, err)
|
||||
|
|
@ -91,7 +91,7 @@ func TestQueuedRetry_OnError(t *testing.T) {
|
|||
qCfg.NumConsumers = 1
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
rCfg.InitialInterval = 0
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newObservabilityConsumerSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newObservabilityConsumerSender,
|
||||
WithMarshaler(mockRequestMarshaler), WithUnmarshaler(mockRequestUnmarshaler(&mockRequest{})),
|
||||
WithRetry(rCfg), WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
|
|
@ -121,7 +121,7 @@ func TestQueuedRetry_MaxElapsedTime(t *testing.T) {
|
|||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
rCfg.InitialInterval = time.Millisecond
|
||||
rCfg.MaxElapsedTime = 100 * time.Millisecond
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newObservabilityConsumerSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newObservabilityConsumerSender,
|
||||
WithMarshaler(mockRequestMarshaler), WithUnmarshaler(mockRequestUnmarshaler(&mockRequest{})),
|
||||
WithRetry(rCfg), WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
|
|
@ -169,7 +169,7 @@ func TestQueuedRetry_ThrottleError(t *testing.T) {
|
|||
qCfg.NumConsumers = 1
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
rCfg.InitialInterval = 10 * time.Millisecond
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newObservabilityConsumerSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newObservabilityConsumerSender,
|
||||
WithMarshaler(mockRequestMarshaler), WithUnmarshaler(mockRequestUnmarshaler(&mockRequest{})),
|
||||
WithRetry(rCfg), WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
|
|
@ -203,7 +203,7 @@ func TestQueuedRetry_RetryOnError(t *testing.T) {
|
|||
qCfg.QueueSize = 1
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
rCfg.InitialInterval = 0
|
||||
be, err := NewBaseExporter(defaultSettings, defaultDataType, newObservabilityConsumerSender,
|
||||
be, err := NewBaseExporter(defaultSettings, defaultSignal, newObservabilityConsumerSender,
|
||||
WithMarshaler(mockRequestMarshaler), WithUnmarshaler(mockRequestUnmarshaler(&mockRequest{})),
|
||||
WithRetry(rCfg), WithQueue(qCfg))
|
||||
require.NoError(t, err)
|
||||
|
|
@ -230,7 +230,7 @@ func TestQueuedRetry_RetryOnError(t *testing.T) {
|
|||
func TestQueueRetryWithNoQueue(t *testing.T) {
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
rCfg.MaxElapsedTime = time.Nanosecond // fail fast
|
||||
be, err := NewBaseExporter(exportertest.NewNopSettings(), component.DataTypeLogs, newObservabilityConsumerSender, WithRetry(rCfg))
|
||||
be, err := NewBaseExporter(exportertest.NewNopSettings(), pipeline.SignalLogs, newObservabilityConsumerSender, WithRetry(rCfg))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost()))
|
||||
ocs := be.ObsrepSender.(*observabilityConsumerSender)
|
||||
|
|
@ -251,7 +251,7 @@ func TestQueueRetryWithDisabledRetires(t *testing.T) {
|
|||
set := exportertest.NewNopSettings()
|
||||
logger, observed := observer.New(zap.ErrorLevel)
|
||||
set.Logger = zap.New(logger)
|
||||
be, err := NewBaseExporter(set, component.DataTypeLogs, newObservabilityConsumerSender, WithRetry(rCfg))
|
||||
be, err := NewBaseExporter(set, pipeline.SignalLogs, newObservabilityConsumerSender, WithRetry(rCfg))
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost()))
|
||||
ocs := be.ObsrepSender.(*observabilityConsumerSender)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exporterqueue"
|
||||
"go.opentelemetry.io/collector/exporter/internal/queue"
|
||||
"go.opentelemetry.io/collector/pdata/plog"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
var logsMarshaler = &plog.ProtoMarshaler{}
|
||||
|
|
@ -119,7 +120,7 @@ func NewLogsRequestExporter(
|
|||
return nil, errNilLogsConverter
|
||||
}
|
||||
|
||||
be, err := internal.NewBaseExporter(set, component.DataTypeLogs, newLogsExporterWithObservability, options...)
|
||||
be, err := internal.NewBaseExporter(set, pipeline.SignalLogs, newLogsExporterWithObservability, options...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -134,7 +135,7 @@ func NewLogsRequestExporter(
|
|||
}
|
||||
sErr := be.Send(ctx, req)
|
||||
if errors.Is(sErr, queue.ErrQueueIsFull) {
|
||||
be.Obsrep.RecordEnqueueFailure(ctx, component.DataTypeLogs, int64(req.ItemsCount()))
|
||||
be.Obsrep.RecordEnqueueFailure(ctx, pipeline.SignalLogs, int64(req.ItemsCount()))
|
||||
}
|
||||
return sErr
|
||||
}, be.ConsumerOptions...)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exporterqueue"
|
||||
"go.opentelemetry.io/collector/exporter/internal/queue"
|
||||
"go.opentelemetry.io/collector/pdata/pmetric"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
var metricsMarshaler = &pmetric.ProtoMarshaler{}
|
||||
|
|
@ -119,7 +120,7 @@ func NewMetricsRequestExporter(
|
|||
return nil, errNilMetricsConverter
|
||||
}
|
||||
|
||||
be, err := internal.NewBaseExporter(set, component.DataTypeMetrics, newMetricsSenderWithObservability, options...)
|
||||
be, err := internal.NewBaseExporter(set, pipeline.SignalMetrics, newMetricsSenderWithObservability, options...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -134,7 +135,7 @@ func NewMetricsRequestExporter(
|
|||
}
|
||||
sErr := be.Send(ctx, req)
|
||||
if errors.Is(sErr, queue.ErrQueueIsFull) {
|
||||
be.Obsrep.RecordEnqueueFailure(ctx, component.DataTypeMetrics, int64(req.ItemsCount()))
|
||||
be.Obsrep.RecordEnqueueFailure(ctx, pipeline.SignalMetrics, int64(req.ItemsCount()))
|
||||
}
|
||||
return sErr
|
||||
}, be.ConsumerOptions...)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import (
|
|||
"go.opentelemetry.io/collector/component/componenttest"
|
||||
"go.opentelemetry.io/collector/exporter"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
var exporterID = component.MustNewID("fakeExporter")
|
||||
|
|
@ -29,14 +30,14 @@ func TestExportEnqueueFailure(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
logRecords := int64(7)
|
||||
obsrep.RecordEnqueueFailure(context.Background(), component.DataTypeLogs, logRecords)
|
||||
obsrep.RecordEnqueueFailure(context.Background(), pipeline.SignalLogs, logRecords)
|
||||
require.NoError(t, tt.CheckExporterEnqueueFailedLogs(logRecords))
|
||||
|
||||
spans := int64(12)
|
||||
obsrep.RecordEnqueueFailure(context.Background(), component.DataTypeTraces, spans)
|
||||
obsrep.RecordEnqueueFailure(context.Background(), pipeline.SignalTraces, spans)
|
||||
require.NoError(t, tt.CheckExporterEnqueueFailedTraces(spans))
|
||||
|
||||
metricPoints := int64(21)
|
||||
obsrep.RecordEnqueueFailure(context.Background(), component.DataTypeMetrics, metricPoints)
|
||||
obsrep.RecordEnqueueFailure(context.Background(), pipeline.SignalMetrics, metricPoints)
|
||||
require.NoError(t, tt.CheckExporterEnqueueFailedMetrics(metricPoints))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exporterqueue"
|
||||
"go.opentelemetry.io/collector/exporter/internal/queue"
|
||||
"go.opentelemetry.io/collector/pdata/ptrace"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
var tracesMarshaler = &ptrace.ProtoMarshaler{}
|
||||
|
|
@ -119,7 +120,7 @@ func NewTracesRequestExporter(
|
|||
return nil, errNilTracesConverter
|
||||
}
|
||||
|
||||
be, err := internal.NewBaseExporter(set, component.DataTypeTraces, newTracesExporterWithObservability, options...)
|
||||
be, err := internal.NewBaseExporter(set, pipeline.SignalTraces, newTracesExporterWithObservability, options...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -134,7 +135,7 @@ func NewTracesRequestExporter(
|
|||
}
|
||||
sErr := be.Send(ctx, req)
|
||||
if errors.Is(sErr, queue.ErrQueueIsFull) {
|
||||
be.Obsrep.RecordEnqueueFailure(ctx, component.DataTypeTraces, int64(req.ItemsCount()))
|
||||
be.Obsrep.RecordEnqueueFailure(ctx, pipeline.SignalTraces, int64(req.ItemsCount()))
|
||||
}
|
||||
return sErr
|
||||
}, be.ConsumerOptions...)
|
||||
|
|
|
|||
|
|
@ -19,8 +19,10 @@ require (
|
|||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer/consumerprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.30.0 // indirect
|
||||
|
|
@ -62,3 +64,9 @@ replace go.opentelemetry.io/collector/consumer => ../../consumer
|
|||
replace go.opentelemetry.io/collector/exporter => ../
|
||||
|
||||
replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receiver/receiverprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ import (
|
|||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/exporter"
|
||||
"go.opentelemetry.io/collector/exporter/internal/queue"
|
||||
"go.opentelemetry.io/collector/internal/globalsignal"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// ErrQueueIsFull is the error that Queue returns when full.
|
||||
|
|
@ -24,7 +26,11 @@ type Queue[T any] queue.Queue[T]
|
|||
|
||||
// Settings defines settings for creating a queue.
|
||||
type Settings struct {
|
||||
DataType component.DataType
|
||||
|
||||
// Deprecated: [v0.110.0] Use Signal instead
|
||||
DataType component.DataType // nolint
|
||||
|
||||
Signal pipeline.Signal
|
||||
ExporterSettings exporter.Settings
|
||||
}
|
||||
|
||||
|
|
@ -74,10 +80,14 @@ func NewPersistentQueueFactory[T itemsCounter](storageID *component.ID, factoryS
|
|||
return NewMemoryQueueFactory[T]()
|
||||
}
|
||||
return func(_ context.Context, set Settings, cfg Config) Queue[T] {
|
||||
signal := set.Signal
|
||||
if set.DataType.String() != "" {
|
||||
signal = globalsignal.MustNewSignal(set.DataType.String())
|
||||
}
|
||||
return queue.NewPersistentQueue[T](queue.PersistentQueueSettings[T]{
|
||||
Sizer: sizerFromConfig[T](cfg),
|
||||
Capacity: capacityFromConfig(cfg),
|
||||
DataType: set.DataType,
|
||||
Signal: signal,
|
||||
StorageID: *storageID,
|
||||
Marshaler: factorySettings.Marshaler,
|
||||
Unmarshaler: factorySettings.Unmarshaler,
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import (
|
|||
"go.opentelemetry.io/collector/pdata/plog"
|
||||
"go.opentelemetry.io/collector/pdata/pmetric"
|
||||
"go.opentelemetry.io/collector/pdata/ptrace"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/receiver"
|
||||
"go.opentelemetry.io/collector/receiver/receivertest"
|
||||
)
|
||||
|
|
@ -33,7 +34,12 @@ type CheckConsumeContractParams struct {
|
|||
T *testing.T
|
||||
NumberOfTestElements int
|
||||
// DataType to test for.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use Signal instead
|
||||
// nolint
|
||||
DataType component.DataType
|
||||
|
||||
Signal pipeline.Signal
|
||||
// ExporterFactory to create an exporter to be tested.
|
||||
ExporterFactory exporter.Factory
|
||||
ExporterConfig component.Config
|
||||
|
|
@ -84,18 +90,18 @@ func CheckConsumeContract(params CheckConsumeContractParams) {
|
|||
|
||||
func checkConsumeContractScenario(t *testing.T, params CheckConsumeContractParams, decisionFunc func() error, checkIfTestPassed func(*testing.T, int, requestCounter)) {
|
||||
mockConsumerInstance := newMockConsumer(decisionFunc)
|
||||
switch params.DataType {
|
||||
case component.DataTypeLogs:
|
||||
switch params.Signal {
|
||||
case pipeline.SignalLogs:
|
||||
r, err := params.ReceiverFactory.CreateLogsReceiver(context.Background(), receivertest.NewNopSettings(), params.ReceiverConfig, &mockConsumerInstance)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, r.Start(context.Background(), componenttest.NewNopHost()))
|
||||
checkLogs(t, params, r, &mockConsumerInstance, checkIfTestPassed)
|
||||
case component.DataTypeTraces:
|
||||
case pipeline.SignalTraces:
|
||||
r, err := params.ReceiverFactory.CreateTracesReceiver(context.Background(), receivertest.NewNopSettings(), params.ReceiverConfig, &mockConsumerInstance)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, r.Start(context.Background(), componenttest.NewNopHost()))
|
||||
checkTraces(t, params, r, &mockConsumerInstance, checkIfTestPassed)
|
||||
case component.DataTypeMetrics:
|
||||
case pipeline.SignalMetrics:
|
||||
r, err := params.ReceiverFactory.CreateMetricsReceiver(context.Background(), receivertest.NewNopSettings(), params.ReceiverConfig, &mockConsumerInstance)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, r.Start(context.Background(), componenttest.NewNopHost()))
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import (
|
|||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/exporter"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/receiver"
|
||||
)
|
||||
|
||||
|
|
@ -109,7 +110,7 @@ func TestCheckConsumeContractLogs(t *testing.T) {
|
|||
params := CheckConsumeContractParams{
|
||||
T: t,
|
||||
ExporterFactory: newMockExporterFactory(mr),
|
||||
DataType: component.DataTypeLogs,
|
||||
Signal: pipeline.SignalLogs,
|
||||
ExporterConfig: nopConfig{},
|
||||
NumberOfTestElements: 10,
|
||||
ReceiverFactory: newMockReceiverFactory(mr),
|
||||
|
|
@ -123,7 +124,7 @@ func TestCheckConsumeContractMetrics(t *testing.T) {
|
|||
CheckConsumeContract(CheckConsumeContractParams{
|
||||
T: t,
|
||||
ExporterFactory: newMockExporterFactory(mr),
|
||||
DataType: component.DataTypeMetrics, // Change to the appropriate data type
|
||||
Signal: pipeline.SignalMetrics, // Change to the appropriate data type
|
||||
ExporterConfig: nopConfig{},
|
||||
NumberOfTestElements: 10,
|
||||
ReceiverFactory: newMockReceiverFactory(mr),
|
||||
|
|
@ -135,7 +136,7 @@ func TestCheckConsumeContractTraces(t *testing.T) {
|
|||
CheckConsumeContract(CheckConsumeContractParams{
|
||||
T: t,
|
||||
ExporterFactory: newMockExporterFactory(mr),
|
||||
DataType: component.DataTypeTraces,
|
||||
Signal: pipeline.SignalTraces,
|
||||
ExporterConfig: nopConfig{},
|
||||
NumberOfTestElements: 10,
|
||||
ReceiverFactory: newMockReceiverFactory(mr),
|
||||
|
|
|
|||
|
|
@ -15,9 +15,11 @@ require (
|
|||
go.opentelemetry.io/collector/exporter/exporterprofiles v0.109.0
|
||||
go.opentelemetry.io/collector/extension v0.109.0
|
||||
go.opentelemetry.io/collector/extension/experimental/storage v0.109.0
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0
|
||||
go.opentelemetry.io/collector/pdata v1.15.0
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0
|
||||
go.opentelemetry.io/collector/pdata/testdata v0.109.0
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0
|
||||
go.opentelemetry.io/collector/receiver v0.109.0
|
||||
go.opentelemetry.io/otel v1.30.0
|
||||
go.opentelemetry.io/otel/metric v1.30.0
|
||||
|
|
@ -40,6 +42,7 @@ 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/component/componentprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver/receiverprofiles v0.109.0 // indirect
|
||||
golang.org/x/net v0.28.0 // indirect
|
||||
golang.org/x/text v0.17.0 // indirect
|
||||
|
|
@ -62,6 +65,8 @@ replace go.opentelemetry.io/collector/pdata/testdata => ../pdata/testdata
|
|||
|
||||
replace go.opentelemetry.io/collector/pdata/pprofile => ../pdata/pprofile
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/receiver => ../receiver
|
||||
|
||||
retract v0.76.0 // Depends on retracted pdata v1.0.0-rc10 module
|
||||
|
|
@ -77,3 +82,7 @@ replace go.opentelemetry.io/collector/consumer/consumertest => ../consumer/consu
|
|||
replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../receiver/receiverprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/exporter/exporterprofiles => ./exporterprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import (
|
|||
"context"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// Factory is a factory interface for exporters.
|
||||
|
|
@ -17,7 +18,7 @@ type Factory interface {
|
|||
|
||||
// CreateTracesExporter creates a TracesExporter based on this config.
|
||||
// If the exporter type does not support tracing,
|
||||
// this function returns the error [component.ErrDataTypeIsNotSupported].
|
||||
// this function returns the error [pipeline.ErrSignalNotSupported].
|
||||
CreateTracesExporter(ctx context.Context, set Settings, cfg component.Config) (Traces, error)
|
||||
|
||||
// TracesExporterStability gets the stability level of the TracesExporter.
|
||||
|
|
@ -25,7 +26,7 @@ type Factory interface {
|
|||
|
||||
// CreateMetricsExporter creates a MetricsExporter based on this config.
|
||||
// If the exporter type does not support metrics,
|
||||
// this function returns the error [component.ErrDataTypeIsNotSupported].
|
||||
// this function returns the error [pipeline.ErrSignalNotSupported].
|
||||
CreateMetricsExporter(ctx context.Context, set Settings, cfg component.Config) (Metrics, error)
|
||||
|
||||
// MetricsExporterStability gets the stability level of the MetricsExporter.
|
||||
|
|
@ -33,7 +34,7 @@ type Factory interface {
|
|||
|
||||
// CreateLogsExporter creates a LogsExporter based on the config.
|
||||
// If the exporter type does not support logs,
|
||||
// this function returns the error [component.ErrDataTypeIsNotSupported].
|
||||
// this function returns the error [pipeline.ErrSignalNotSupported].
|
||||
CreateLogsExporter(ctx context.Context, set Settings, cfg component.Config) (Logs, error)
|
||||
|
||||
// LogsExporterStability gets the stability level of the LogsExporter.
|
||||
|
|
@ -41,7 +42,7 @@ type Factory interface {
|
|||
|
||||
// CreateProfilesExporter creates a ProfilesExporter based on this config.
|
||||
// If the exporter type does not support tracing,
|
||||
// this function returns the error [component.ErrDataTypeIsNotSupported].
|
||||
// this function returns the error [pipeline.ErrSignalNotSupported].
|
||||
CreateProfilesExporter(ctx context.Context, set Settings, cfg component.Config) (Profiles, error)
|
||||
|
||||
// ProfilesExporterStability gets the stability level of the ProfilesExporter.
|
||||
|
|
@ -71,7 +72,7 @@ type CreateTracesFunc func(context.Context, Settings, component.Config) (Traces,
|
|||
// CreateTracesExporter implements ExporterFactory.CreateTracesExporter().
|
||||
func (f CreateTracesFunc) CreateTracesExporter(ctx context.Context, set Settings, cfg component.Config) (Traces, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg)
|
||||
}
|
||||
|
|
@ -82,7 +83,7 @@ type CreateMetricsFunc func(context.Context, Settings, component.Config) (Metric
|
|||
// CreateMetricsExporter implements ExporterFactory.CreateMetricsExporter().
|
||||
func (f CreateMetricsFunc) CreateMetricsExporter(ctx context.Context, set Settings, cfg component.Config) (Metrics, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg)
|
||||
}
|
||||
|
|
@ -93,7 +94,7 @@ type CreateLogsFunc func(context.Context, Settings, component.Config) (Logs, err
|
|||
// CreateLogsExporter implements Factory.CreateLogsExporter().
|
||||
func (f CreateLogsFunc) CreateLogsExporter(ctx context.Context, set Settings, cfg component.Config) (Logs, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg)
|
||||
}
|
||||
|
|
@ -104,7 +105,7 @@ type CreateProfilesFunc func(context.Context, Settings, component.Config) (Profi
|
|||
// CreateProfilesExporter implements ExporterFactory.CreateProfilesExporter().
|
||||
func (f CreateProfilesFunc) CreateProfilesExporter(ctx context.Context, set Settings, cfg component.Config) (Profiles, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter"
|
||||
"go.opentelemetry.io/collector/exporter/internal/experr"
|
||||
"go.opentelemetry.io/collector/extension/experimental/storage"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// persistentQueue provides a persistent queue implementation backed by file storage extension
|
||||
|
|
@ -85,7 +86,7 @@ var (
|
|||
type PersistentQueueSettings[T any] struct {
|
||||
Sizer Sizer[T]
|
||||
Capacity int64
|
||||
DataType component.DataType
|
||||
Signal pipeline.Signal
|
||||
StorageID component.ID
|
||||
Marshaler func(req T) ([]byte, error)
|
||||
Unmarshaler func([]byte) (T, error)
|
||||
|
|
@ -104,7 +105,7 @@ func NewPersistentQueue[T any](set PersistentQueueSettings[T]) Queue[T] {
|
|||
|
||||
// Start starts the persistentQueue with the given number of consumers.
|
||||
func (pq *persistentQueue[T]) Start(ctx context.Context, host component.Host) error {
|
||||
storageClient, err := toStorageClient(ctx, pq.set.StorageID, host, pq.set.ExporterSettings.ID, pq.set.DataType)
|
||||
storageClient, err := toStorageClient(ctx, pq.set.StorageID, host, pq.set.ExporterSettings.ID, pq.set.Signal)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -485,7 +486,7 @@ func (pq *persistentQueue[T]) itemDispatchingFinish(ctx context.Context, index u
|
|||
return nil
|
||||
}
|
||||
|
||||
func toStorageClient(ctx context.Context, storageID component.ID, host component.Host, ownerID component.ID, signal component.DataType) (storage.Client, error) {
|
||||
func toStorageClient(ctx context.Context, storageID component.ID, host component.Host, ownerID component.ID, signal pipeline.Signal) (storage.Client, error) {
|
||||
ext, found := host.GetExtensions()[storageID]
|
||||
if !found {
|
||||
return nil, errNoStorageClient
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"go.opentelemetry.io/collector/extension/extensiontest"
|
||||
"go.opentelemetry.io/collector/pdata/pcommon"
|
||||
"go.opentelemetry.io/collector/pdata/ptrace"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
type tracesRequest struct {
|
||||
|
|
@ -60,7 +61,7 @@ func createAndStartTestPersistentQueue(t *testing.T, sizer Sizer[tracesRequest],
|
|||
pq := NewPersistentQueue[tracesRequest](PersistentQueueSettings[tracesRequest]{
|
||||
Sizer: sizer,
|
||||
Capacity: capacity,
|
||||
DataType: component.DataTypeTraces,
|
||||
Signal: pipeline.SignalTraces,
|
||||
StorageID: component.ID{},
|
||||
Marshaler: marshalTracesRequest,
|
||||
Unmarshaler: unmarshalTracesRequest,
|
||||
|
|
@ -81,7 +82,7 @@ func createTestPersistentQueueWithClient(client storage.Client) *persistentQueue
|
|||
pq := NewPersistentQueue[tracesRequest](PersistentQueueSettings[tracesRequest]{
|
||||
Sizer: &RequestSizer[tracesRequest]{},
|
||||
Capacity: 1000,
|
||||
DataType: component.DataTypeTraces,
|
||||
Signal: pipeline.SignalTraces,
|
||||
StorageID: component.ID{},
|
||||
Marshaler: marshalTracesRequest,
|
||||
Unmarshaler: unmarshalTracesRequest,
|
||||
|
|
@ -104,7 +105,7 @@ func createTestPersistentQueueWithCapacityLimiter(t testing.TB, ext storage.Exte
|
|||
pq := NewPersistentQueue[tracesRequest](PersistentQueueSettings[tracesRequest]{
|
||||
Sizer: sizer,
|
||||
Capacity: capacity,
|
||||
DataType: component.DataTypeTraces,
|
||||
Signal: pipeline.SignalTraces,
|
||||
StorageID: component.ID{},
|
||||
Marshaler: marshalTracesRequest,
|
||||
Unmarshaler: unmarshalTracesRequest,
|
||||
|
|
@ -305,7 +306,7 @@ func TestToStorageClient(t *testing.T) {
|
|||
ownerID := component.MustNewID("foo_exporter")
|
||||
|
||||
// execute
|
||||
client, err := toStorageClient(context.Background(), storageID, host, ownerID, component.DataTypeTraces)
|
||||
client, err := toStorageClient(context.Background(), storageID, host, ownerID, pipeline.SignalTraces)
|
||||
|
||||
// verify
|
||||
if tt.expectedError != nil {
|
||||
|
|
@ -335,7 +336,7 @@ func TestInvalidStorageExtensionType(t *testing.T) {
|
|||
ownerID := component.MustNewID("foo_exporter")
|
||||
|
||||
// execute
|
||||
client, err := toStorageClient(context.Background(), storageID, host, ownerID, component.DataTypeTraces)
|
||||
client, err := toStorageClient(context.Background(), storageID, host, ownerID, pipeline.SignalTraces)
|
||||
|
||||
// we should get an error about the extension type
|
||||
require.ErrorIs(t, err, errWrongExtensionType)
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ 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/component/componentprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configretry v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer/consumerprofiles v0.109.0 // indirect
|
||||
|
|
@ -38,7 +39,9 @@ require (
|
|||
go.opentelemetry.io/collector/exporter/exporterprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/extension v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/extension/experimental/storage v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver/receiverprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
|
|
@ -92,3 +95,9 @@ replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/co
|
|||
replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receiver/receiverprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/exporter/exporterprofiles => ../exporterprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -28,11 +28,14 @@ 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/component/componentprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer/consumerprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/exporter/exporterprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver/receiverprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
|
|
@ -82,3 +85,9 @@ replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/co
|
|||
replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receiver/receiverprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/exporter/exporterprofiles => ../exporterprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ require (
|
|||
github.com/mostynb/go-grpc-compression v1.2.3 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
go.opentelemetry.io/collector/client v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/component/componentprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/confignet v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/internal v0.109.1-0.20240916143658-74729e731d3b // indirect
|
||||
|
|
@ -58,7 +59,9 @@ require (
|
|||
go.opentelemetry.io/collector/extension/experimental/storage v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/featuregate v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalgates v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver/receiverprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 // indirect
|
||||
|
|
@ -136,3 +139,9 @@ replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receive
|
|||
replace go.opentelemetry.io/collector/exporter/exporterprofiles => ../exporterprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalgates => ../../internal/globalgates
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ require (
|
|||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/rs/cors v1.11.1 // indirect
|
||||
go.opentelemetry.io/collector/client v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/component/componentprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configauth v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/internal v0.109.1-0.20240916143658-74729e731d3b // indirect
|
||||
|
|
@ -57,7 +58,9 @@ require (
|
|||
go.opentelemetry.io/collector/extension/experimental/storage v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/featuregate v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalgates v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver/receiverprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect
|
||||
|
|
@ -133,3 +136,9 @@ replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../../receive
|
|||
replace go.opentelemetry.io/collector/exporter/exporterprofiles => ../exporterprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalgates => ../../internal/globalgates
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -18,7 +18,9 @@ require (
|
|||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.30.0 // indirect
|
||||
|
|
@ -41,3 +43,7 @@ replace go.opentelemetry.io/collector/extension => ../
|
|||
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/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -10,7 +10,9 @@ require (
|
|||
require (
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.30.0 // indirect
|
||||
|
|
@ -31,3 +33,7 @@ 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/internal/globalsignal => ../../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../../pipeline
|
||||
|
|
|
|||
|
|
@ -17,7 +17,9 @@ require (
|
|||
github.com/mitchellh/copystructure v1.2.0 // indirect
|
||||
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.30.0 // indirect
|
||||
|
|
@ -41,3 +43,7 @@ replace go.opentelemetry.io/collector/confmap => ../../confmap
|
|||
replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry
|
||||
|
||||
replace go.opentelemetry.io/collector/component => ../../component
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -16,7 +16,9 @@ require (
|
|||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.30.0 // indirect
|
||||
|
|
@ -38,3 +40,7 @@ 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/pipeline => ../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -33,7 +33,9 @@ require (
|
|||
github.com/tklauser/numcpus v0.6.1 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.30.0 // indirect
|
||||
|
|
@ -72,3 +74,7 @@ replace go.opentelemetry.io/collector/consumer/consumerprofiles => ../../consume
|
|||
replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/consumertest
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -46,7 +46,9 @@ require (
|
|||
go.opentelemetry.io/collector/extension/auth v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/featuregate v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalgates v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
|
|
@ -109,3 +111,7 @@ replace go.opentelemetry.io/collector/client => ../../client
|
|||
replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalgates => ../../internal/globalgates
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
6
go.mod
6
go.mod
|
|
@ -52,6 +52,8 @@ require (
|
|||
github.com/tklauser/numcpus v0.6.1 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.30.0 // indirect
|
||||
|
|
@ -92,3 +94,7 @@ retract (
|
|||
replace go.opentelemetry.io/collector/pdata/pprofile => ./pdata/pprofile
|
||||
|
||||
replace go.opentelemetry.io/collector/consumer/consumerprofiles => ./consumer/consumerprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ./pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ./internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exportertest"
|
||||
"go.opentelemetry.io/collector/exporter/otlpexporter"
|
||||
"go.opentelemetry.io/collector/internal/testutil"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/receiver/otlpreceiver"
|
||||
)
|
||||
|
||||
|
|
@ -48,7 +49,7 @@ func TestConsumeContractOtlpLogs(t *testing.T) {
|
|||
T: t,
|
||||
NumberOfTestElements: 10,
|
||||
ExporterFactory: otlpexporter.NewFactory(),
|
||||
DataType: component.DataTypeLogs,
|
||||
Signal: pipeline.SignalLogs,
|
||||
ExporterConfig: testExporterConfig(addr),
|
||||
ReceiverFactory: otlpreceiver.NewFactory(),
|
||||
ReceiverConfig: testReceiverConfig(addr),
|
||||
|
|
@ -60,7 +61,7 @@ func TestConsumeContractOtlpTraces(t *testing.T) {
|
|||
exportertest.CheckConsumeContract(exportertest.CheckConsumeContractParams{
|
||||
T: t,
|
||||
NumberOfTestElements: 10,
|
||||
DataType: component.DataTypeTraces,
|
||||
Signal: pipeline.SignalTraces,
|
||||
ExporterFactory: otlpexporter.NewFactory(),
|
||||
ExporterConfig: testExporterConfig(addr),
|
||||
ReceiverFactory: otlpreceiver.NewFactory(),
|
||||
|
|
@ -74,7 +75,7 @@ func TestConsumeContractOtlpMetrics(t *testing.T) {
|
|||
T: t,
|
||||
NumberOfTestElements: 10,
|
||||
ExporterFactory: otlpexporter.NewFactory(),
|
||||
DataType: component.DataTypeMetrics,
|
||||
Signal: pipeline.SignalMetrics,
|
||||
ExporterConfig: testExporterConfig(addr),
|
||||
ReceiverFactory: otlpreceiver.NewFactory(),
|
||||
ReceiverConfig: testReceiverConfig(addr),
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ require (
|
|||
go.opentelemetry.io/collector/extension v0.109.0
|
||||
go.opentelemetry.io/collector/pdata v1.15.0
|
||||
go.opentelemetry.io/collector/pdata/testdata v0.109.0
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0
|
||||
go.opentelemetry.io/collector/receiver v0.109.0
|
||||
go.opentelemetry.io/collector/receiver/otlpreceiver v0.109.0
|
||||
go.opentelemetry.io/collector/service v0.109.0
|
||||
|
|
@ -84,6 +85,7 @@ require (
|
|||
go.opentelemetry.io/collector/extension/extensioncapabilities v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/featuregate v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalgates v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/processor v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/processor/processorprofiles v0.109.0 // indirect
|
||||
|
|
@ -206,3 +208,7 @@ replace go.opentelemetry.io/collector/processor/processorprofiles => ../../proce
|
|||
replace go.opentelemetry.io/collector/connector/connectorprofiles => ../../connector/connectorprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/exporter/exporterprofiles => ../../exporter/exporterprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../globalsignal
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exportertest"
|
||||
"go.opentelemetry.io/collector/extension"
|
||||
"go.opentelemetry.io/collector/internal/sharedcomponent"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/receiver"
|
||||
"go.opentelemetry.io/collector/service"
|
||||
"go.opentelemetry.io/collector/service/extensions"
|
||||
|
|
@ -100,12 +101,12 @@ func Test_ComponentStatusReporting_SharedInstance(t *testing.T) {
|
|||
Level: configtelemetry.LevelNone,
|
||||
},
|
||||
},
|
||||
Pipelines: pipelines.Config{
|
||||
component.MustNewID("traces"): {
|
||||
PipelinesWithPipelineID: pipelines.ConfigWithPipelineID{
|
||||
pipeline.MustNewID("traces"): {
|
||||
Receivers: []component.ID{component.NewID(component.MustNewType("test"))},
|
||||
Exporters: []component.ID{component.NewID(nopType)},
|
||||
},
|
||||
component.MustNewID("metrics"): {
|
||||
pipeline.MustNewID("metrics"): {
|
||||
Receivers: []component.ID{component.NewID(component.MustNewType("test"))},
|
||||
Exporters: []component.ID{component.NewID(nopType)},
|
||||
},
|
||||
|
|
@ -127,7 +128,7 @@ func Test_ComponentStatusReporting_SharedInstance(t *testing.T) {
|
|||
|
||||
for instanceID, events := range eventsReceived {
|
||||
pipelineIDs := ""
|
||||
instanceID.AllPipelineIDs(func(id component.ID) bool {
|
||||
instanceID.AllPipelineIDsWithPipelineIDs(func(id pipeline.ID) bool {
|
||||
pipelineIDs += id.String() + ","
|
||||
return true
|
||||
})
|
||||
|
|
|
|||
|
|
@ -9,10 +9,11 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestTotalMemory(t *testing.T) {
|
||||
totalMemory, err := TotalMemory()
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
assert.Positive(t, totalMemory)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ func (cfg *Config) Validate() error {
|
|||
}
|
||||
|
||||
// Check that all pipelines reference only configured components.
|
||||
// nolint
|
||||
for pipelineID, pipeline := range cfg.Service.Pipelines {
|
||||
// Validate pipeline receiver name references.
|
||||
for _, ref := range pipeline.Receivers {
|
||||
|
|
@ -153,5 +154,41 @@ func (cfg *Config) Validate() error {
|
|||
return fmt.Errorf("service::pipelines::%s: references exporter %q which is not configured", pipelineID, ref)
|
||||
}
|
||||
}
|
||||
|
||||
// Check that all pipelines reference only configured components.
|
||||
for pipelineID, pipeline := range cfg.Service.PipelinesWithPipelineID {
|
||||
// Validate pipeline receiver name references.
|
||||
for _, ref := range pipeline.Receivers {
|
||||
// Check that the name referenced in the pipeline's receivers exists in the top-level receivers.
|
||||
if _, ok := cfg.Receivers[ref]; ok {
|
||||
continue
|
||||
}
|
||||
|
||||
if _, ok := cfg.Connectors[ref]; ok {
|
||||
continue
|
||||
}
|
||||
return fmt.Errorf("service::pipelines::%s: references receiver %q which is not configured", pipelineID.String(), ref)
|
||||
}
|
||||
|
||||
// Validate pipeline processor name references.
|
||||
for _, ref := range pipeline.Processors {
|
||||
// Check that the name referenced in the pipeline's processors exists in the top-level processors.
|
||||
if cfg.Processors[ref] == nil {
|
||||
return fmt.Errorf("service::pipelines::%s: references processor %q which is not configured", pipelineID.String(), ref)
|
||||
}
|
||||
}
|
||||
|
||||
// Validate pipeline exporter name references.
|
||||
for _, ref := range pipeline.Exporters {
|
||||
// Check that the name referenced in the pipeline's Exporters exists in the top-level Exporters.
|
||||
if _, ok := cfg.Exporters[ref]; ok {
|
||||
continue
|
||||
}
|
||||
if _, ok := cfg.Connectors[ref]; ok {
|
||||
continue
|
||||
}
|
||||
return fmt.Errorf("service::pipelines::%s: references exporter %q which is not configured", pipelineID.String(), ref)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import (
|
|||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/config/configtelemetry"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/service"
|
||||
"go.opentelemetry.io/collector/service/pipelines"
|
||||
"go.opentelemetry.io/collector/service/telemetry"
|
||||
|
|
@ -98,7 +99,7 @@ func TestConfigValidate(t *testing.T) {
|
|||
name: "invalid-receiver-reference",
|
||||
cfgFn: func() *Config {
|
||||
cfg := generateConfig()
|
||||
pipe := cfg.Service.Pipelines[component.MustNewID("traces")]
|
||||
pipe := cfg.Service.PipelinesWithPipelineID[pipeline.MustNewID("traces")]
|
||||
pipe.Receivers = append(pipe.Receivers, component.MustNewIDWithName("nop", "2"))
|
||||
return cfg
|
||||
},
|
||||
|
|
@ -108,7 +109,7 @@ func TestConfigValidate(t *testing.T) {
|
|||
name: "invalid-processor-reference",
|
||||
cfgFn: func() *Config {
|
||||
cfg := generateConfig()
|
||||
pipe := cfg.Service.Pipelines[component.MustNewID("traces")]
|
||||
pipe := cfg.Service.PipelinesWithPipelineID[pipeline.MustNewID("traces")]
|
||||
pipe.Processors = append(pipe.Processors, component.MustNewIDWithName("nop", "2"))
|
||||
return cfg
|
||||
},
|
||||
|
|
@ -118,7 +119,7 @@ func TestConfigValidate(t *testing.T) {
|
|||
name: "invalid-exporter-reference",
|
||||
cfgFn: func() *Config {
|
||||
cfg := generateConfig()
|
||||
pipe := cfg.Service.Pipelines[component.MustNewID("traces")]
|
||||
pipe := cfg.Service.PipelinesWithPipelineID[pipeline.MustNewID("traces")]
|
||||
pipe.Exporters = append(pipe.Exporters, component.MustNewIDWithName("nop", "2"))
|
||||
return cfg
|
||||
},
|
||||
|
|
@ -185,7 +186,7 @@ func TestConfigValidate(t *testing.T) {
|
|||
cfg := generateConfig()
|
||||
cfg.Receivers[component.MustNewID("nop2")] = &errConfig{}
|
||||
cfg.Connectors[component.MustNewID("nop2")] = &errConfig{}
|
||||
pipe := cfg.Service.Pipelines[component.MustNewID("traces")]
|
||||
pipe := cfg.Service.PipelinesWithPipelineID[pipeline.MustNewID("traces")]
|
||||
pipe.Receivers = append(pipe.Receivers, component.MustNewIDWithName("nop", "2"))
|
||||
pipe.Exporters = append(pipe.Exporters, component.MustNewIDWithName("nop", "2"))
|
||||
return cfg
|
||||
|
|
@ -198,7 +199,7 @@ func TestConfigValidate(t *testing.T) {
|
|||
cfg := generateConfig()
|
||||
cfg.Exporters[component.MustNewID("nop2")] = &errConfig{}
|
||||
cfg.Connectors[component.MustNewID("nop2")] = &errConfig{}
|
||||
pipe := cfg.Service.Pipelines[component.MustNewID("traces")]
|
||||
pipe := cfg.Service.PipelinesWithPipelineID[pipeline.MustNewID("traces")]
|
||||
pipe.Receivers = append(pipe.Receivers, component.MustNewIDWithName("nop", "2"))
|
||||
pipe.Exporters = append(pipe.Exporters, component.MustNewIDWithName("nop", "2"))
|
||||
return cfg
|
||||
|
|
@ -209,7 +210,7 @@ func TestConfigValidate(t *testing.T) {
|
|||
name: "invalid-connector-reference-as-receiver",
|
||||
cfgFn: func() *Config {
|
||||
cfg := generateConfig()
|
||||
pipe := cfg.Service.Pipelines[component.MustNewID("traces")]
|
||||
pipe := cfg.Service.PipelinesWithPipelineID[pipeline.MustNewID("traces")]
|
||||
pipe.Receivers = append(pipe.Receivers, component.MustNewIDWithName("nop", "conn2"))
|
||||
return cfg
|
||||
},
|
||||
|
|
@ -219,7 +220,7 @@ func TestConfigValidate(t *testing.T) {
|
|||
name: "invalid-connector-reference-as-receiver",
|
||||
cfgFn: func() *Config {
|
||||
cfg := generateConfig()
|
||||
pipe := cfg.Service.Pipelines[component.MustNewID("traces")]
|
||||
pipe := cfg.Service.PipelinesWithPipelineID[pipeline.MustNewID("traces")]
|
||||
pipe.Exporters = append(pipe.Exporters, component.MustNewIDWithName("nop", "conn2"))
|
||||
return cfg
|
||||
},
|
||||
|
|
@ -229,7 +230,7 @@ func TestConfigValidate(t *testing.T) {
|
|||
name: "invalid-service-config",
|
||||
cfgFn: func() *Config {
|
||||
cfg := generateConfig()
|
||||
cfg.Service.Pipelines = nil
|
||||
cfg.Service.PipelinesWithPipelineID = nil
|
||||
return cfg
|
||||
},
|
||||
expected: fmt.Errorf(`service::pipelines config validation failed: %w`, errors.New(`service must have at least one pipeline`)),
|
||||
|
|
@ -279,8 +280,8 @@ func generateConfig() *Config {
|
|||
},
|
||||
},
|
||||
Extensions: []component.ID{component.MustNewID("nop")},
|
||||
Pipelines: pipelines.Config{
|
||||
component.MustNewID("traces"): {
|
||||
PipelinesWithPipelineID: pipelines.ConfigWithPipelineID{
|
||||
pipeline.MustNewID("traces"): {
|
||||
Receivers: []component.ID{component.MustNewID("nop")},
|
||||
Processors: []component.ID{component.MustNewID("nop")},
|
||||
Exporters: []component.ID{component.MustNewID("nop")},
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exportertest"
|
||||
"go.opentelemetry.io/collector/extension"
|
||||
"go.opentelemetry.io/collector/extension/extensiontest"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/processor"
|
||||
"go.opentelemetry.io/collector/processor/processortest"
|
||||
"go.opentelemetry.io/collector/receiver"
|
||||
|
|
@ -37,7 +38,7 @@ func nopFactories() (Factories, error) {
|
|||
factories.ExtensionModules[ext.Type()] = "go.opentelemetry.io/collector/extension/extensiontest v1.2.3"
|
||||
}
|
||||
|
||||
if factories.Receivers, err = receiver.MakeFactoryMap(receivertest.NewNopFactory(), receivertest.NewNopFactoryForType(component.DataTypeLogs)); err != nil {
|
||||
if factories.Receivers, err = receiver.MakeFactoryMap(receivertest.NewNopFactory(), receivertest.NewNopFactoryForTypeWithSignal(pipeline.SignalLogs)); err != nil {
|
||||
return Factories{}, err
|
||||
}
|
||||
factories.ReceiverModules = make(map[component.Type]string, len(factories.Receivers))
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ require (
|
|||
go.opentelemetry.io/collector/exporter v0.109.0
|
||||
go.opentelemetry.io/collector/extension v0.109.0
|
||||
go.opentelemetry.io/collector/featuregate v1.15.0
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0
|
||||
go.opentelemetry.io/collector/processor v0.109.0
|
||||
go.opentelemetry.io/collector/receiver v0.109.0
|
||||
go.opentelemetry.io/collector/service v0.109.0
|
||||
|
|
@ -71,6 +72,7 @@ require (
|
|||
go.opentelemetry.io/collector/exporter/exporterprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/extension/extensioncapabilities v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalgates v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/testdata v0.109.0 // indirect
|
||||
|
|
@ -178,3 +180,7 @@ replace go.opentelemetry.io/collector/processor/processorprofiles => ../processo
|
|||
replace go.opentelemetry.io/collector/connector/connectorprofiles => ../connector/connectorprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/exporter/exporterprofiles => ../exporter/exporterprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/service/pipelines"
|
||||
)
|
||||
|
||||
|
|
@ -48,14 +49,14 @@ func TestLoadConfig(t *testing.T) {
|
|||
// Verify service.
|
||||
require.Len(t, cfg.Service.Extensions, 1)
|
||||
assert.Contains(t, cfg.Service.Extensions, component.MustNewID("nop"))
|
||||
require.Len(t, cfg.Service.Pipelines, 1)
|
||||
require.Len(t, cfg.Service.PipelinesWithPipelineID, 1)
|
||||
assert.Equal(t,
|
||||
&pipelines.PipelineConfig{
|
||||
Receivers: []component.ID{component.MustNewID("nop")},
|
||||
Processors: []component.ID{component.MustNewID("nop")},
|
||||
Exporters: []component.ID{component.MustNewID("nop")},
|
||||
},
|
||||
cfg.Service.Pipelines[component.MustNewID("traces")],
|
||||
cfg.Service.PipelinesWithPipelineID[pipeline.MustNewID("traces")],
|
||||
"Did not load pipeline config correctly")
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ require (
|
|||
go.opentelemetry.io/collector/exporter v0.109.0
|
||||
go.opentelemetry.io/collector/extension v0.109.0
|
||||
go.opentelemetry.io/collector/otelcol v0.109.0
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0
|
||||
go.opentelemetry.io/collector/processor v0.109.0
|
||||
go.opentelemetry.io/collector/receiver v0.109.0
|
||||
go.opentelemetry.io/collector/service v0.109.0
|
||||
|
|
@ -70,6 +71,7 @@ require (
|
|||
go.opentelemetry.io/collector/extension/extensioncapabilities v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/featuregate v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalgates v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/testdata v0.109.0 // indirect
|
||||
|
|
@ -193,3 +195,7 @@ replace go.opentelemetry.io/collector/processor/processorprofiles => ../../proce
|
|||
replace go.opentelemetry.io/collector/connector/connectorprofiles => ../../connector/connectorprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/exporter/exporterprofiles => ../../exporter/exporterprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ func TestPipelineConfigUnmarshalError(t *testing.T) {
|
|||
|
||||
for _, tt := range testCases {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
pips := new(pipelines.Config)
|
||||
pips := new(pipelines.ConfigWithPipelineID)
|
||||
err := tt.conf.Unmarshal(&pips)
|
||||
require.Error(t, err)
|
||||
assert.Contains(t, err.Error(), tt.expectError)
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
package pipeline // import "go.opentelemetry.io/collector/pipeline"
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"go.opentelemetry.io/collector/internal/globalsignal"
|
||||
)
|
||||
|
||||
|
|
@ -11,6 +13,8 @@ import (
|
|||
// collecting metrics, traces and logs, this can expand in the future.
|
||||
type Signal = globalsignal.Signal
|
||||
|
||||
var ErrSignalNotSupported = errors.New("telemetry type is not supported")
|
||||
|
||||
var (
|
||||
SignalTraces = globalsignal.MustNewSignal("traces")
|
||||
SignalMetrics = globalsignal.MustNewSignal("metrics")
|
||||
|
|
|
|||
|
|
@ -39,7 +39,9 @@ require (
|
|||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
go.opentelemetry.io/collector/component/componentstatus v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer/consumerprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/processor/processorprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.30.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
|
|
@ -82,3 +84,7 @@ replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/co
|
|||
replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus
|
||||
|
||||
replace go.opentelemetry.io/collector/processor/processorprofiles => ../processorprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ require (
|
|||
go.opentelemetry.io/collector/pdata v1.15.0
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0
|
||||
go.opentelemetry.io/collector/pdata/testdata v0.109.0
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0
|
||||
go.opentelemetry.io/collector/processor/processorprofiles v0.109.0
|
||||
go.opentelemetry.io/otel v1.30.0
|
||||
go.opentelemetry.io/otel/metric v1.30.0
|
||||
|
|
@ -31,6 +32,7 @@ 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/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.30.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
go.uber.org/zap v1.27.0 // indirect
|
||||
|
|
@ -62,3 +64,7 @@ replace go.opentelemetry.io/collector/consumer/consumertest => ../consumer/consu
|
|||
replace go.opentelemetry.io/collector/component/componentstatus => ../component/componentstatus
|
||||
|
||||
replace go.opentelemetry.io/collector/processor/processorprofiles => ./processorprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import (
|
|||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumerprofiles"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// Factory is a Factory interface for processors.
|
||||
|
|
@ -20,7 +21,7 @@ type Factory interface {
|
|||
|
||||
// CreateTracesProcessor creates a TracesProcessor based on this config.
|
||||
// If the processor type does not support traces,
|
||||
// this function returns the error [component.ErrDataTypeIsNotSupported].
|
||||
// this function returns the error [pipeline.ErrSignalNotSupported].
|
||||
// Implementers can assume `nextConsumer` is never nil.
|
||||
CreateTracesProcessor(ctx context.Context, set Settings, cfg component.Config, nextConsumer consumer.Traces) (Traces, error)
|
||||
|
||||
|
|
@ -29,7 +30,7 @@ type Factory interface {
|
|||
|
||||
// CreateMetricsProcessor creates a MetricsProcessor based on this config.
|
||||
// If the processor type does not support metrics,
|
||||
// this function returns the error [component.ErrDataTypeIsNotSupported].
|
||||
// this function returns the error [pipeline.ErrSignalNotSupported].
|
||||
// Implementers can assume `nextConsumer` is never nil.
|
||||
CreateMetricsProcessor(ctx context.Context, set Settings, cfg component.Config, nextConsumer consumer.Metrics) (Metrics, error)
|
||||
|
||||
|
|
@ -38,7 +39,7 @@ type Factory interface {
|
|||
|
||||
// CreateLogsProcessor creates a LogsProcessor based on the config.
|
||||
// If the processor type does not support logs,
|
||||
// this function returns the error [component.ErrDataTypeIsNotSupported].
|
||||
// this function returns the error [pipeline.ErrSignalNotSupported].
|
||||
// Implementers can assume `nextConsumer` is never nil.
|
||||
CreateLogsProcessor(ctx context.Context, set Settings, cfg component.Config, nextConsumer consumer.Logs) (Logs, error)
|
||||
|
||||
|
|
@ -81,7 +82,7 @@ func (f CreateTracesFunc) CreateTracesProcessor(
|
|||
cfg component.Config,
|
||||
nextConsumer consumer.Traces) (Traces, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -97,7 +98,7 @@ func (f CreateMetricsFunc) CreateMetricsProcessor(
|
|||
nextConsumer consumer.Metrics,
|
||||
) (Metrics, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -113,7 +114,7 @@ func (f CreateLogsFunc) CreateLogsProcessor(
|
|||
nextConsumer consumer.Logs,
|
||||
) (Logs, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -128,7 +129,7 @@ func (f CreateProfilesFunc) CreateProfilesProcessor(
|
|||
cfg component.Config,
|
||||
nextConsumer consumerprofiles.Profiles) (Profiles, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,8 +40,10 @@ require (
|
|||
go.opentelemetry.io/collector/component/componentstatus v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer/consumerprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/testdata v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/processor/processorprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
|
|
@ -89,3 +91,7 @@ replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/co
|
|||
replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus
|
||||
|
||||
replace go.opentelemetry.io/collector/processor/processorprofiles => ../processorprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import (
|
|||
"go.opentelemetry.io/otel/metric"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/processor"
|
||||
"go.opentelemetry.io/collector/processor/internal"
|
||||
"go.opentelemetry.io/collector/processor/processorhelper/internal/metadata"
|
||||
|
|
@ -65,18 +66,18 @@ func (or *ObsReport) recordInOut(ctx context.Context, incoming, outgoing int) {
|
|||
or.telemetryBuilder.ProcessorOutgoingItems.Add(ctx, int64(outgoing), metric.WithAttributes(or.otelAttrs...))
|
||||
}
|
||||
|
||||
func (or *ObsReport) recordData(ctx context.Context, dataType component.DataType, accepted, refused, dropped int64) {
|
||||
func (or *ObsReport) recordData(ctx context.Context, signal pipeline.Signal, accepted, refused, dropped int64) {
|
||||
var acceptedCount, refusedCount, droppedCount metric.Int64Counter
|
||||
switch dataType {
|
||||
case component.DataTypeTraces:
|
||||
switch signal {
|
||||
case pipeline.SignalTraces:
|
||||
acceptedCount = or.telemetryBuilder.ProcessorAcceptedSpans
|
||||
refusedCount = or.telemetryBuilder.ProcessorRefusedSpans
|
||||
droppedCount = or.telemetryBuilder.ProcessorDroppedSpans
|
||||
case component.DataTypeMetrics:
|
||||
case pipeline.SignalMetrics:
|
||||
acceptedCount = or.telemetryBuilder.ProcessorAcceptedMetricPoints
|
||||
refusedCount = or.telemetryBuilder.ProcessorRefusedMetricPoints
|
||||
droppedCount = or.telemetryBuilder.ProcessorDroppedMetricPoints
|
||||
case component.DataTypeLogs:
|
||||
case pipeline.SignalLogs:
|
||||
acceptedCount = or.telemetryBuilder.ProcessorAcceptedLogRecords
|
||||
refusedCount = or.telemetryBuilder.ProcessorRefusedLogRecords
|
||||
droppedCount = or.telemetryBuilder.ProcessorDroppedLogRecords
|
||||
|
|
@ -91,61 +92,61 @@ func (or *ObsReport) recordData(ctx context.Context, dataType component.DataType
|
|||
//
|
||||
// Deprecated: [v0.110.0] Processor helper automatically calculates incoming/outgoing metrics only.
|
||||
func (or *ObsReport) TracesAccepted(ctx context.Context, numSpans int) {
|
||||
or.recordData(ctx, component.DataTypeTraces, int64(numSpans), int64(0), int64(0))
|
||||
or.recordData(ctx, pipeline.SignalTraces, int64(numSpans), int64(0), int64(0))
|
||||
}
|
||||
|
||||
// TracesRefused reports that the trace data was refused.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Processor helper automatically calculates incoming/outgoing metrics only.
|
||||
func (or *ObsReport) TracesRefused(ctx context.Context, numSpans int) {
|
||||
or.recordData(ctx, component.DataTypeTraces, int64(0), int64(numSpans), int64(0))
|
||||
or.recordData(ctx, pipeline.SignalTraces, int64(0), int64(numSpans), int64(0))
|
||||
}
|
||||
|
||||
// TracesDropped reports that the trace data was dropped.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Processor helper automatically calculates incoming/outgoing metrics only.
|
||||
func (or *ObsReport) TracesDropped(ctx context.Context, numSpans int) {
|
||||
or.recordData(ctx, component.DataTypeTraces, int64(0), int64(0), int64(numSpans))
|
||||
or.recordData(ctx, pipeline.SignalTraces, int64(0), int64(0), int64(numSpans))
|
||||
}
|
||||
|
||||
// MetricsAccepted reports that the metrics were accepted.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Processor helper automatically calculates incoming/outgoing metrics only.
|
||||
func (or *ObsReport) MetricsAccepted(ctx context.Context, numPoints int) {
|
||||
or.recordData(ctx, component.DataTypeMetrics, int64(numPoints), int64(0), int64(0))
|
||||
or.recordData(ctx, pipeline.SignalMetrics, int64(numPoints), int64(0), int64(0))
|
||||
}
|
||||
|
||||
// MetricsRefused reports that the metrics were refused.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Processor helper automatically calculates incoming/outgoing metrics only.
|
||||
func (or *ObsReport) MetricsRefused(ctx context.Context, numPoints int) {
|
||||
or.recordData(ctx, component.DataTypeMetrics, int64(0), int64(numPoints), int64(0))
|
||||
or.recordData(ctx, pipeline.SignalMetrics, int64(0), int64(numPoints), int64(0))
|
||||
}
|
||||
|
||||
// MetricsDropped reports that the metrics were dropped.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Processor helper automatically calculates incoming/outgoing metrics only.
|
||||
func (or *ObsReport) MetricsDropped(ctx context.Context, numPoints int) {
|
||||
or.recordData(ctx, component.DataTypeMetrics, int64(0), int64(0), int64(numPoints))
|
||||
or.recordData(ctx, pipeline.SignalMetrics, int64(0), int64(0), int64(numPoints))
|
||||
}
|
||||
|
||||
// LogsAccepted reports that the logs were accepted.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Processor helper automatically calculates incoming/outgoing metrics only.
|
||||
func (or *ObsReport) LogsAccepted(ctx context.Context, numRecords int) {
|
||||
or.recordData(ctx, component.DataTypeLogs, int64(numRecords), int64(0), int64(0))
|
||||
or.recordData(ctx, pipeline.SignalLogs, int64(numRecords), int64(0), int64(0))
|
||||
}
|
||||
|
||||
// LogsRefused reports that the logs were refused.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Processor helper automatically calculates incoming/outgoing metrics only.
|
||||
func (or *ObsReport) LogsRefused(ctx context.Context, numRecords int) {
|
||||
or.recordData(ctx, component.DataTypeLogs, int64(0), int64(numRecords), int64(0))
|
||||
or.recordData(ctx, pipeline.SignalLogs, int64(0), int64(numRecords), int64(0))
|
||||
}
|
||||
|
||||
// LogsDropped reports that the logs were dropped.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Processor helper automatically calculates incoming/outgoing metrics only.
|
||||
func (or *ObsReport) LogsDropped(ctx context.Context, numRecords int) {
|
||||
or.recordData(ctx, component.DataTypeLogs, int64(0), int64(0), int64(numRecords))
|
||||
or.recordData(ctx, pipeline.SignalLogs, int64(0), int64(0), int64(numRecords))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,8 +19,10 @@ require (
|
|||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.30.0 // indirect
|
||||
|
|
@ -54,3 +56,7 @@ replace go.opentelemetry.io/collector/consumer/consumerprofiles => ../../consume
|
|||
replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/consumertest
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import (
|
|||
"go.opentelemetry.io/collector/component/componenttest"
|
||||
"go.opentelemetry.io/collector/consumer/consumertest"
|
||||
"go.opentelemetry.io/collector/pdata/testdata"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/processor"
|
||||
)
|
||||
|
||||
|
|
@ -22,7 +23,7 @@ func verifyTracesDoesNotProduceAfterShutdown(t *testing.T, factory processor.Fac
|
|||
// Create a proc and output its produce to a sink.
|
||||
nextSink := new(consumertest.TracesSink)
|
||||
proc, err := factory.CreateTracesProcessor(context.Background(), NewNopSettings(), cfg, nextSink)
|
||||
if errors.Is(err, component.ErrDataTypeIsNotSupported) {
|
||||
if errors.Is(err, pipeline.ErrSignalNotSupported) {
|
||||
return
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
|
@ -46,7 +47,7 @@ func verifyLogsDoesNotProduceAfterShutdown(t *testing.T, factory processor.Facto
|
|||
// Create a proc and output its produce to a sink.
|
||||
nextSink := new(consumertest.LogsSink)
|
||||
proc, err := factory.CreateLogsProcessor(context.Background(), NewNopSettings(), cfg, nextSink)
|
||||
if errors.Is(err, component.ErrDataTypeIsNotSupported) {
|
||||
if errors.Is(err, pipeline.ErrSignalNotSupported) {
|
||||
return
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
|
@ -70,7 +71,7 @@ func verifyMetricsDoesNotProduceAfterShutdown(t *testing.T, factory processor.Fa
|
|||
// Create a proc and output its produce to a sink.
|
||||
nextSink := new(consumertest.MetricsSink)
|
||||
proc, err := factory.CreateMetricsProcessor(context.Background(), NewNopSettings(), cfg, nextSink)
|
||||
if errors.Is(err, component.ErrDataTypeIsNotSupported) {
|
||||
if errors.Is(err, pipeline.ErrSignalNotSupported) {
|
||||
return
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
|
|
|||
|
|
@ -6,11 +6,14 @@ require (
|
|||
github.com/google/uuid v1.6.0
|
||||
github.com/stretchr/testify v1.9.0
|
||||
go.opentelemetry.io/collector/component v0.109.0
|
||||
go.opentelemetry.io/collector/component/componentprofiles v0.109.0
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0
|
||||
go.opentelemetry.io/collector/consumer v0.109.0
|
||||
go.opentelemetry.io/collector/consumer/consumerprofiles v0.109.0
|
||||
go.opentelemetry.io/collector/consumer/consumertest v0.109.0
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0
|
||||
go.opentelemetry.io/collector/pdata v1.15.0
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0
|
||||
go.opentelemetry.io/collector/receiver/receiverprofiles v0.109.0
|
||||
go.opentelemetry.io/otel v1.30.0
|
||||
go.opentelemetry.io/otel/metric v1.30.0
|
||||
|
|
@ -60,3 +63,9 @@ replace go.opentelemetry.io/collector/consumer/consumertest => ../consumer/consu
|
|||
replace go.opentelemetry.io/collector/receiver/receiverprofiles => ./receiverprofiles
|
||||
|
||||
retract v0.76.0 // Depends on retracted pdata v1.0.0-rc10 module
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import (
|
|||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumerprofiles"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
// Factory is a factory interface for receivers.
|
||||
|
|
@ -20,7 +21,7 @@ type Factory interface {
|
|||
|
||||
// CreateTracesReceiver creates a TracesReceiver based on this config.
|
||||
// If the receiver type does not support traces,
|
||||
// this function returns the error [component.ErrDataTypeIsNotSupported].
|
||||
// this function returns the error [pipeline.ErrSignalNotSupported].
|
||||
// Implementers can assume `nextConsumer` is never nil.
|
||||
CreateTracesReceiver(ctx context.Context, set Settings, cfg component.Config, nextConsumer consumer.Traces) (Traces, error)
|
||||
|
||||
|
|
@ -29,7 +30,7 @@ type Factory interface {
|
|||
|
||||
// CreateMetricsReceiver creates a MetricsReceiver based on this config.
|
||||
// If the receiver type does not support metrics,
|
||||
// this function returns the error [component.ErrDataTypeIsNotSupported].
|
||||
// this function returns the error [pipeline.ErrSignalNotSupported].
|
||||
// Implementers can assume `nextConsumer` is never nil.
|
||||
CreateMetricsReceiver(ctx context.Context, set Settings, cfg component.Config, nextConsumer consumer.Metrics) (Metrics, error)
|
||||
|
||||
|
|
@ -38,7 +39,7 @@ type Factory interface {
|
|||
|
||||
// CreateLogsReceiver creates a LogsReceiver based on this config.
|
||||
// If the receiver type does not support logs,
|
||||
// this function returns the error [component.ErrDataTypeIsNotSupported].
|
||||
// this function returns the error [pipeline.ErrSignalNotSupported].
|
||||
// Implementers can assume `nextConsumer` is never nil.
|
||||
CreateLogsReceiver(ctx context.Context, set Settings, cfg component.Config, nextConsumer consumer.Logs) (Logs, error)
|
||||
|
||||
|
|
@ -79,7 +80,7 @@ func (f CreateTracesFunc) CreateTracesReceiver(
|
|||
cfg component.Config,
|
||||
nextConsumer consumer.Traces) (Traces, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -95,7 +96,7 @@ func (f CreateMetricsFunc) CreateMetricsReceiver(
|
|||
nextConsumer consumer.Metrics,
|
||||
) (Metrics, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -111,7 +112,7 @@ func (f CreateLogsFunc) CreateLogsReceiver(
|
|||
nextConsumer consumer.Logs,
|
||||
) (Logs, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
@ -126,7 +127,7 @@ func (f CreateProfilesFunc) CreateProfilesReceiver(
|
|||
cfg component.Config,
|
||||
nextConsumer consumerprofiles.Profiles) (Profiles, error) {
|
||||
if f == nil {
|
||||
return nil, component.ErrDataTypeIsNotSupported
|
||||
return nil, pipeline.ErrSignalNotSupported
|
||||
}
|
||||
return f(ctx, set, cfg, nextConsumer)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,10 +28,13 @@ 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/component/componentprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer/consumerprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/receiver/receiverprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
|
|
@ -70,3 +73,9 @@ replace go.opentelemetry.io/collector/consumer/consumerprofiles => ../../consume
|
|||
replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/consumertest
|
||||
|
||||
replace go.opentelemetry.io/collector/receiver/receiverprofiles => ../receiverprofiles
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ require (
|
|||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/rs/cors v1.11.1 // indirect
|
||||
go.opentelemetry.io/collector/client v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/component/componentprofiles v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configcompression v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configopaque v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
|
|
@ -60,6 +61,8 @@ require (
|
|||
go.opentelemetry.io/collector/extension v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/extension/auth v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/featuregate v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
|
|
@ -130,3 +133,9 @@ retract (
|
|||
v0.76.0 // Depends on retracted pdata v1.0.0-rc10 module, use v0.76.1
|
||||
v0.69.0 // Release failed, use v0.69.1
|
||||
)
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import (
|
|||
"go.opentelemetry.io/otel/trace"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/receiver"
|
||||
"go.opentelemetry.io/collector/receiver/internal"
|
||||
"go.opentelemetry.io/collector/receiver/receiverhelper/internal/metadata"
|
||||
|
|
@ -82,7 +83,7 @@ func (rec *ObsReport) EndTracesOp(
|
|||
numReceivedSpans int,
|
||||
err error,
|
||||
) {
|
||||
rec.endOp(receiverCtx, format, numReceivedSpans, err, component.DataTypeTraces)
|
||||
rec.endOp(receiverCtx, format, numReceivedSpans, err, pipeline.SignalTraces)
|
||||
}
|
||||
|
||||
// StartLogsOp is called when a request is received from a client.
|
||||
|
|
@ -100,7 +101,7 @@ func (rec *ObsReport) EndLogsOp(
|
|||
numReceivedLogRecords int,
|
||||
err error,
|
||||
) {
|
||||
rec.endOp(receiverCtx, format, numReceivedLogRecords, err, component.DataTypeLogs)
|
||||
rec.endOp(receiverCtx, format, numReceivedLogRecords, err, pipeline.SignalLogs)
|
||||
}
|
||||
|
||||
// StartMetricsOp is called when a request is received from a client.
|
||||
|
|
@ -118,7 +119,7 @@ func (rec *ObsReport) EndMetricsOp(
|
|||
numReceivedPoints int,
|
||||
err error,
|
||||
) {
|
||||
rec.endOp(receiverCtx, format, numReceivedPoints, err, component.DataTypeMetrics)
|
||||
rec.endOp(receiverCtx, format, numReceivedPoints, err, pipeline.SignalMetrics)
|
||||
}
|
||||
|
||||
// startOp creates the span used to trace the operation. Returning
|
||||
|
|
@ -152,7 +153,7 @@ func (rec *ObsReport) endOp(
|
|||
format string,
|
||||
numReceivedItems int,
|
||||
err error,
|
||||
dataType component.DataType,
|
||||
signal pipeline.Signal,
|
||||
) {
|
||||
numAccepted := numReceivedItems
|
||||
numRefused := 0
|
||||
|
|
@ -163,19 +164,19 @@ func (rec *ObsReport) endOp(
|
|||
|
||||
span := trace.SpanFromContext(receiverCtx)
|
||||
|
||||
rec.recordMetrics(receiverCtx, dataType, numAccepted, numRefused)
|
||||
rec.recordMetrics(receiverCtx, signal, numAccepted, numRefused)
|
||||
|
||||
// end span according to errors
|
||||
if span.IsRecording() {
|
||||
var acceptedItemsKey, refusedItemsKey string
|
||||
switch dataType {
|
||||
case component.DataTypeTraces:
|
||||
switch signal {
|
||||
case pipeline.SignalTraces:
|
||||
acceptedItemsKey = internal.AcceptedSpansKey
|
||||
refusedItemsKey = internal.RefusedSpansKey
|
||||
case component.DataTypeMetrics:
|
||||
case pipeline.SignalMetrics:
|
||||
acceptedItemsKey = internal.AcceptedMetricPointsKey
|
||||
refusedItemsKey = internal.RefusedMetricPointsKey
|
||||
case component.DataTypeLogs:
|
||||
case pipeline.SignalLogs:
|
||||
acceptedItemsKey = internal.AcceptedLogRecordsKey
|
||||
refusedItemsKey = internal.RefusedLogRecordsKey
|
||||
}
|
||||
|
|
@ -192,16 +193,16 @@ func (rec *ObsReport) endOp(
|
|||
span.End()
|
||||
}
|
||||
|
||||
func (rec *ObsReport) recordMetrics(receiverCtx context.Context, dataType component.DataType, numAccepted, numRefused int) {
|
||||
func (rec *ObsReport) recordMetrics(receiverCtx context.Context, signal pipeline.Signal, numAccepted, numRefused int) {
|
||||
var acceptedMeasure, refusedMeasure metric.Int64Counter
|
||||
switch dataType {
|
||||
case component.DataTypeTraces:
|
||||
switch signal {
|
||||
case pipeline.SignalTraces:
|
||||
acceptedMeasure = rec.telemetryBuilder.ReceiverAcceptedSpans
|
||||
refusedMeasure = rec.telemetryBuilder.ReceiverRefusedSpans
|
||||
case component.DataTypeMetrics:
|
||||
case pipeline.SignalMetrics:
|
||||
acceptedMeasure = rec.telemetryBuilder.ReceiverAcceptedMetricPoints
|
||||
refusedMeasure = rec.telemetryBuilder.ReceiverRefusedMetricPoints
|
||||
case component.DataTypeLogs:
|
||||
case pipeline.SignalLogs:
|
||||
acceptedMeasure = rec.telemetryBuilder.ReceiverAcceptedLogRecords
|
||||
refusedMeasure = rec.telemetryBuilder.ReceiverRefusedLogRecords
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,8 +19,10 @@ require (
|
|||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
go.opentelemetry.io/collector/config/configtelemetry v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/consumer v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/internal/globalsignal v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.15.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata/pprofile v0.109.0 // indirect
|
||||
go.opentelemetry.io/collector/pipeline v0.109.0 // indirect
|
||||
go.opentelemetry.io/otel v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.30.0 // indirect
|
||||
|
|
@ -52,3 +54,9 @@ replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile
|
|||
replace go.opentelemetry.io/collector/pdata => ../../pdata
|
||||
|
||||
replace go.opentelemetry.io/collector/consumer/consumertest => ../../consumer/consumertest
|
||||
|
||||
replace go.opentelemetry.io/collector/pipeline => ../../pipeline
|
||||
|
||||
replace go.opentelemetry.io/collector/internal/globalsignal => ../../internal/globalsignal
|
||||
|
||||
replace go.opentelemetry.io/collector/component/componentprofiles => ../../component/componentprofiles
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/component/componentprofiles"
|
||||
"go.opentelemetry.io/collector/component/componenttest"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumererror"
|
||||
|
|
@ -24,6 +25,7 @@ import (
|
|||
"go.opentelemetry.io/collector/pdata/plog"
|
||||
"go.opentelemetry.io/collector/pdata/pmetric"
|
||||
"go.opentelemetry.io/collector/pdata/ptrace"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/receiver"
|
||||
)
|
||||
|
||||
|
|
@ -54,8 +56,13 @@ type CheckConsumeContractParams struct {
|
|||
T *testing.T
|
||||
// Factory that allows to create a receiver.
|
||||
Factory receiver.Factory
|
||||
|
||||
// DataType to test for.
|
||||
DataType component.DataType
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use Signal instead.
|
||||
DataType component.DataType // nolint
|
||||
|
||||
Signal pipeline.Signal
|
||||
// Config of the receiver to use.
|
||||
Config component.Config
|
||||
// Generator that can send data to the receiver.
|
||||
|
|
@ -111,12 +118,26 @@ func checkConsumeContractScenario(params CheckConsumeContractParams, decisionFun
|
|||
// Create and start the receiver.
|
||||
var receiver component.Component
|
||||
var err error
|
||||
|
||||
s := params.Signal
|
||||
// nolint
|
||||
switch params.DataType {
|
||||
case component.DataTypeLogs:
|
||||
receiver, err = params.Factory.CreateLogsReceiver(ctx, NewNopSettings(), params.Config, consumer)
|
||||
case component.DataTypeTraces:
|
||||
receiver, err = params.Factory.CreateTracesReceiver(ctx, NewNopSettings(), params.Config, consumer)
|
||||
s = pipeline.SignalTraces
|
||||
case component.DataTypeMetrics:
|
||||
s = pipeline.SignalMetrics
|
||||
case component.DataTypeLogs:
|
||||
s = pipeline.SignalLogs
|
||||
case componentprofiles.DataTypeProfiles:
|
||||
s = componentprofiles.SignalProfiles
|
||||
}
|
||||
|
||||
switch s {
|
||||
case pipeline.SignalLogs:
|
||||
receiver, err = params.Factory.CreateLogsReceiver(ctx, NewNopSettings(), params.Config, consumer)
|
||||
case pipeline.SignalTraces:
|
||||
receiver, err = params.Factory.CreateTracesReceiver(ctx, NewNopSettings(), params.Config, consumer)
|
||||
case pipeline.SignalMetrics:
|
||||
receiver, err = params.Factory.CreateMetricsReceiver(ctx, NewNopSettings(), params.Config, consumer)
|
||||
default:
|
||||
require.FailNow(params.T, "must specify a valid DataType to test for")
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import (
|
|||
"go.opentelemetry.io/collector/pdata/plog"
|
||||
"go.opentelemetry.io/collector/pdata/pmetric"
|
||||
"go.opentelemetry.io/collector/pdata/ptrace"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/receiver"
|
||||
)
|
||||
|
||||
|
|
@ -239,7 +240,7 @@ func TestConsumeContract(t *testing.T) {
|
|||
params := CheckConsumeContractParams{
|
||||
T: t,
|
||||
Factory: newExampleFactory(),
|
||||
DataType: component.DataTypeLogs,
|
||||
Signal: pipeline.SignalLogs,
|
||||
Config: cfg,
|
||||
Generator: generator,
|
||||
GenerateCount: logsPerTest,
|
||||
|
|
@ -262,7 +263,7 @@ func TestConsumeMetricsContract(t *testing.T) {
|
|||
params := CheckConsumeContractParams{
|
||||
T: t,
|
||||
Factory: newExampleFactory(),
|
||||
DataType: component.DataTypeMetrics,
|
||||
Signal: pipeline.SignalMetrics,
|
||||
Config: cfg,
|
||||
Generator: generator,
|
||||
GenerateCount: metricsPerTest,
|
||||
|
|
@ -285,7 +286,7 @@ func TestConsumeTracesContract(t *testing.T) {
|
|||
params := CheckConsumeContractParams{
|
||||
T: t,
|
||||
Factory: newExampleFactory(),
|
||||
DataType: component.DataTypeTraces,
|
||||
Signal: pipeline.SignalTraces,
|
||||
Config: cfg,
|
||||
Generator: generator,
|
||||
GenerateCount: spansPerTest,
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ import (
|
|||
"go.opentelemetry.io/collector/component/componenttest"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/consumer/consumerprofiles"
|
||||
"go.opentelemetry.io/collector/internal/globalsignal"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/receiver"
|
||||
"go.opentelemetry.io/collector/receiver/receiverprofiles"
|
||||
)
|
||||
|
|
@ -41,20 +43,28 @@ func NewNopFactory() receiver.Factory {
|
|||
|
||||
// NewNopFactoryForType returns a receiver.Factory that constructs nop receivers supporting only the
|
||||
// given data type.
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use NewNopFactoryForTypeWithSignal instead
|
||||
func NewNopFactoryForType(dataType component.DataType) receiver.Factory {
|
||||
return NewNopFactoryForTypeWithSignal(globalsignal.MustNewSignal(dataType.String()))
|
||||
}
|
||||
|
||||
// NewNopFactoryForTypeWithSignal returns a receiver.Factory that constructs nop receivers supporting only the
|
||||
// given signal.
|
||||
func NewNopFactoryForTypeWithSignal(signal pipeline.Signal) receiver.Factory {
|
||||
var factoryOpt receiver.FactoryOption
|
||||
switch dataType {
|
||||
case component.DataTypeTraces:
|
||||
switch signal {
|
||||
case pipeline.SignalTraces:
|
||||
factoryOpt = receiver.WithTraces(createTraces, component.StabilityLevelStable)
|
||||
case component.DataTypeMetrics:
|
||||
case pipeline.SignalMetrics:
|
||||
factoryOpt = receiver.WithMetrics(createMetrics, component.StabilityLevelStable)
|
||||
case component.DataTypeLogs:
|
||||
case pipeline.SignalLogs:
|
||||
factoryOpt = receiver.WithLogs(createLogs, component.StabilityLevelStable)
|
||||
default:
|
||||
panic("unsupported data type for creating nop receiver factory: " + dataType.String())
|
||||
panic("unsupported data type for creating nop receiver factory: " + signal.String())
|
||||
}
|
||||
|
||||
componentType := component.MustNewType(defaultComponentType.String() + "_" + dataType.String())
|
||||
componentType := component.MustNewType(defaultComponentType.String() + "_" + signal.String())
|
||||
return receiver.NewFactory(componentType, func() component.Config { return &nopConfig{} }, factoryOpt)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import (
|
|||
"go.opentelemetry.io/otel/trace"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
"go.opentelemetry.io/collector/receiver"
|
||||
"go.opentelemetry.io/collector/receiver/internal"
|
||||
"go.opentelemetry.io/collector/receiver/scrapererror"
|
||||
|
|
@ -88,7 +89,7 @@ func (s *obsReport) EndMetricsOp(
|
|||
// end span according to errors
|
||||
if span.IsRecording() {
|
||||
span.SetAttributes(
|
||||
attribute.String(internal.FormatKey, component.DataTypeMetrics.String()),
|
||||
attribute.String(internal.FormatKey, pipeline.SignalMetrics.String()),
|
||||
attribute.Int64(internal.ScrapedMetricPointsKey, int64(numScrapedMetrics)),
|
||||
attribute.Int64(internal.ErroredMetricPointsKey, int64(numErroredMetrics)),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -20,12 +20,28 @@ type Config struct {
|
|||
Extensions extensions.Config `mapstructure:"extensions"`
|
||||
|
||||
// Pipelines are the set of data pipelines configured for the service.
|
||||
Pipelines pipelines.Config `mapstructure:"pipelines"`
|
||||
//
|
||||
// Deprecated: [v0.110.0] Use PipelinesWithPipelineID instead
|
||||
// nolint
|
||||
Pipelines pipelines.Config `mapstructure:"-"`
|
||||
|
||||
// Pipelines are the set of data pipelines configured for the service.
|
||||
PipelinesWithPipelineID pipelines.ConfigWithPipelineID `mapstructure:"pipelines"`
|
||||
}
|
||||
|
||||
func (cfg *Config) Validate() error {
|
||||
if err := cfg.Pipelines.Validate(); err != nil {
|
||||
return fmt.Errorf("service::pipelines config validation failed: %w", err)
|
||||
if len(cfg.Pipelines) > 0 && len(cfg.PipelinesWithPipelineID) > 0 {
|
||||
return fmt.Errorf("service::pipelines config validation failed: cannot configure both Pipelines and PipelinesWithPipelineID")
|
||||
}
|
||||
|
||||
if len(cfg.Pipelines) > 0 {
|
||||
if err := cfg.Pipelines.Validate(); err != nil {
|
||||
return fmt.Errorf("service::pipelines config validation failed: %w", err)
|
||||
}
|
||||
} else {
|
||||
if err := cfg.PipelinesWithPipelineID.Validate(); err != nil {
|
||||
return fmt.Errorf("service::pipelines config validation failed: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := cfg.Telemetry.Validate(); err != nil {
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue