Skip to content

Commit 5ac1607

Browse files
mx-psidmathieu
andauthored
[consumer] Add new consumererrorprofiles module (#11207)
<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue. Ex. Adding a feature - Explain what this achieves.--> #### Description Split off from #11131. Adds new module for consumer errors for profiles. --------- Co-authored-by: Damien Mathieu <[email protected]>
1 parent 623986c commit 5ac1607

File tree

10 files changed

+256
-28
lines changed

10 files changed

+256
-28
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: new_component
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: consumererrorprofiles
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Add new module consumereerrorprofiles for consumer error profiles.
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [11131]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# Optional: The change log or logs in which this entry should be included.
21+
# e.g. '[user]' or '[user, api]'
22+
# Include 'user' if the change is relevant to end users.
23+
# Include 'api' if there is a change to a library API.
24+
# Default: '[user]'
25+
change_logs: [api]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
include ../../../Makefile.Common
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
module go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles
2+
3+
go 1.22.0
4+
5+
require (
6+
github.com/stretchr/testify v1.9.0
7+
go.opentelemetry.io/collector/consumer v0.109.0
8+
go.opentelemetry.io/collector/pdata/pprofile v0.111.0
9+
go.opentelemetry.io/collector/pdata/testdata v0.111.0
10+
)
11+
12+
require (
13+
github.com/davecgh/go-spew v1.1.1 // indirect
14+
github.com/gogo/protobuf v1.3.2 // indirect
15+
github.com/json-iterator/go v1.1.12 // indirect
16+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
17+
github.com/modern-go/reflect2 v1.0.2 // indirect
18+
github.com/pmezard/go-difflib v1.0.0 // indirect
19+
go.opentelemetry.io/collector/pdata v1.17.0 // indirect
20+
go.uber.org/multierr v1.11.0 // indirect
21+
golang.org/x/net v0.28.0 // indirect
22+
golang.org/x/sys v0.24.0 // indirect
23+
golang.org/x/text v0.17.0 // indirect
24+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect
25+
google.golang.org/grpc v1.67.1 // indirect
26+
google.golang.org/protobuf v1.35.1 // indirect
27+
gopkg.in/yaml.v3 v3.0.1 // indirect
28+
)
29+
30+
replace go.opentelemetry.io/collector/consumer => ../..
31+
32+
replace go.opentelemetry.io/collector/pdata => ../../../pdata
33+
34+
replace go.opentelemetry.io/collector/pdata/testdata => ../../../pdata/testdata
35+
36+
replace go.opentelemetry.io/collector/pdata/pprofile => ../../../pdata/pprofile

consumer/consumererror/consumererrorprofiles/go.sum

Lines changed: 77 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package consumererrorprofiles // import "go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles"
5+
6+
import (
7+
"go.opentelemetry.io/collector/consumer/consumererror/internal"
8+
"go.opentelemetry.io/collector/pdata/pprofile"
9+
)
10+
11+
// Profiles is an error that may carry associated Profile data for a subset of received data
12+
// that failed to be processed or sent.
13+
type Profiles struct {
14+
internal.Retryable[pprofile.Profiles]
15+
}
16+
17+
// NewProfiles creates a Profiles that can encapsulate received data that failed to be processed or sent.
18+
func NewProfiles(err error, data pprofile.Profiles) error {
19+
return Profiles{
20+
Retryable: internal.Retryable[pprofile.Profiles]{
21+
Err: err,
22+
Value: data,
23+
},
24+
}
25+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package consumererrorprofiles // import "go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles"
5+
6+
import (
7+
"errors"
8+
"testing"
9+
10+
"github.com/stretchr/testify/assert"
11+
"github.com/stretchr/testify/require"
12+
13+
"go.opentelemetry.io/collector/pdata/testdata"
14+
)
15+
16+
func TestProfiles(t *testing.T) {
17+
td := testdata.GenerateProfiles(1)
18+
err := errors.New("some error")
19+
profileErr := NewProfiles(err, td)
20+
assert.Equal(t, err.Error(), profileErr.Error())
21+
var target Profiles
22+
assert.False(t, errors.As(nil, &target))
23+
assert.False(t, errors.As(err, &target))
24+
require.ErrorAs(t, profileErr, &target)
25+
assert.Equal(t, td, target.Data())
26+
}
27+
28+
func TestProfiles_Unwrap(t *testing.T) {
29+
td := testdata.GenerateProfiles(1)
30+
var err error = testErrorType{"some error"}
31+
// Wrapping err with error Profiles.
32+
profileErr := NewProfiles(err, td)
33+
target := testErrorType{}
34+
require.NotEqual(t, err, target)
35+
// Unwrapping profileErr for err and assigning to target.
36+
require.ErrorAs(t, profileErr, &target)
37+
require.Equal(t, err, target)
38+
}
39+
40+
type testErrorType struct {
41+
s string
42+
}
43+
44+
func (t testErrorType) Error() string {
45+
return ""
46+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package internal // import "go.opentelemetry.io/collector/consumer/consumererror/internal"
5+
6+
import (
7+
"go.opentelemetry.io/collector/pdata/plog"
8+
"go.opentelemetry.io/collector/pdata/pmetric"
9+
"go.opentelemetry.io/collector/pdata/pprofile"
10+
"go.opentelemetry.io/collector/pdata/ptrace"
11+
)
12+
13+
type Retryable[V ptrace.Traces | pmetric.Metrics | plog.Logs | pprofile.Profiles] struct {
14+
Err error
15+
Value V
16+
}
17+
18+
// Error provides the error message
19+
func (err Retryable[V]) Error() string {
20+
return err.Err.Error()
21+
}
22+
23+
// Unwrap returns the wrapped error for functions Is and As in standard package errors.
24+
func (err Retryable[V]) Unwrap() error {
25+
return err.Err
26+
}
27+
28+
// Data returns the telemetry data that failed to be processed or sent.
29+
func (err Retryable[V]) Data() V {
30+
return err.Value
31+
}

consumer/consumererror/signalerrors.go

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,70 +4,56 @@
44
package consumererror // import "go.opentelemetry.io/collector/consumer/consumererror"
55

66
import (
7+
"go.opentelemetry.io/collector/consumer/consumererror/internal"
78
"go.opentelemetry.io/collector/pdata/plog"
89
"go.opentelemetry.io/collector/pdata/pmetric"
910
"go.opentelemetry.io/collector/pdata/ptrace"
1011
)
1112

12-
type retryable[V ptrace.Traces | pmetric.Metrics | plog.Logs] struct {
13-
error
14-
data V
15-
}
16-
17-
// Unwrap returns the wrapped error for functions Is and As in standard package errors.
18-
func (err retryable[V]) Unwrap() error {
19-
return err.error
20-
}
21-
22-
// Data returns the telemetry data that failed to be processed or sent.
23-
func (err retryable[V]) Data() V {
24-
return err.data
25-
}
26-
2713
// Traces is an error that may carry associated Trace data for a subset of received data
2814
// that failed to be processed or sent.
2915
type Traces struct {
30-
retryable[ptrace.Traces]
16+
internal.Retryable[ptrace.Traces]
3117
}
3218

3319
// NewTraces creates a Traces that can encapsulate received data that failed to be processed or sent.
3420
func NewTraces(err error, data ptrace.Traces) error {
3521
return Traces{
36-
retryable: retryable[ptrace.Traces]{
37-
error: err,
38-
data: data,
22+
Retryable: internal.Retryable[ptrace.Traces]{
23+
Err: err,
24+
Value: data,
3925
},
4026
}
4127
}
4228

4329
// Logs is an error that may carry associated Log data for a subset of received data
4430
// that failed to be processed or sent.
4531
type Logs struct {
46-
retryable[plog.Logs]
32+
internal.Retryable[plog.Logs]
4733
}
4834

4935
// NewLogs creates a Logs that can encapsulate received data that failed to be processed or sent.
5036
func NewLogs(err error, data plog.Logs) error {
5137
return Logs{
52-
retryable: retryable[plog.Logs]{
53-
error: err,
54-
data: data,
38+
Retryable: internal.Retryable[plog.Logs]{
39+
Err: err,
40+
Value: data,
5541
},
5642
}
5743
}
5844

5945
// Metrics is an error that may carry associated Metrics data for a subset of received data
6046
// that failed to be processed or sent.
6147
type Metrics struct {
62-
retryable[pmetric.Metrics]
48+
internal.Retryable[pmetric.Metrics]
6349
}
6450

6551
// NewMetrics creates a Metrics that can encapsulate received data that failed to be processed or sent.
6652
func NewMetrics(err error, data pmetric.Metrics) error {
6753
return Metrics{
68-
retryable: retryable[pmetric.Metrics]{
69-
error: err,
70-
data: data,
54+
Retryable: internal.Retryable[pmetric.Metrics]{
55+
Err: err,
56+
Value: data,
7157
},
7258
}
7359
}

consumer/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.22.0
55
require (
66
github.com/stretchr/testify v1.9.0
77
go.opentelemetry.io/collector/pdata v1.17.0
8+
go.opentelemetry.io/collector/pdata/pprofile v0.111.0
89
go.opentelemetry.io/collector/pdata/testdata v0.111.0
910
go.uber.org/goleak v1.3.0
1011
)
@@ -16,7 +17,6 @@ require (
1617
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
1718
github.com/modern-go/reflect2 v1.0.2 // indirect
1819
github.com/pmezard/go-difflib v1.0.0 // indirect
19-
go.opentelemetry.io/collector/pdata/pprofile v0.111.0 // indirect
2020
go.uber.org/multierr v1.11.0 // indirect
2121
golang.org/x/net v0.28.0 // indirect
2222
golang.org/x/sys v0.24.0 // indirect

versions.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ module-sets:
4141
- go.opentelemetry.io/collector/connector/forwardconnector
4242
- go.opentelemetry.io/collector/consumer
4343
- go.opentelemetry.io/collector/consumer/consumerprofiles
44+
- go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles
4445
- go.opentelemetry.io/collector/consumer/consumertest
4546
- go.opentelemetry.io/collector/exporter
4647
- go.opentelemetry.io/collector/exporter/debugexporter

0 commit comments

Comments
 (0)