Skip to content

Commit c06be6d

Browse files
authored
[extension/encoding][otlpencodingextension] Add support for profiles signal (#36008)
#### Description Add support for profiles signal to `encodingextension`.
1 parent 6db5d1a commit c06be6d

File tree

18 files changed

+133
-27
lines changed

18 files changed

+133
-27
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
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: enhancement
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
7+
component: encodingextension
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Add support for profiles signal to encodingextension
11+
12+
# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
13+
issues: [36008]
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+
# If your change doesn't affect end users or the exported elements of any package,
21+
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
22+
# Optional: The change log or logs in which this entry should be included.
23+
# e.g. '[user]' or '[user, api]'
24+
# Include 'user' if the change is relevant to end users.
25+
# Include 'api' if there is a change to a library API.
26+
# Default: '[user]'
27+
change_logs: []

extension/encoding/avrologencodingextension/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ require (
3131
github.com/modern-go/reflect2 v1.0.2 // indirect
3232
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
3333
go.opentelemetry.io/collector/config/configtelemetry v0.113.0 // indirect
34+
go.opentelemetry.io/collector/pdata/pprofile v0.113.0 // indirect
3435
go.opentelemetry.io/otel v1.31.0 // indirect
3536
go.opentelemetry.io/otel/metric v1.31.0 // indirect
3637
go.opentelemetry.io/otel/sdk v1.31.0 // indirect

extension/encoding/avrologencodingextension/go.sum

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extension/encoding/encoding.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"go.opentelemetry.io/collector/extension"
88
"go.opentelemetry.io/collector/pdata/plog"
99
"go.opentelemetry.io/collector/pdata/pmetric"
10+
"go.opentelemetry.io/collector/pdata/pprofile"
1011
"go.opentelemetry.io/collector/pdata/ptrace"
1112
)
1213

@@ -45,3 +46,15 @@ type TracesUnmarshalerExtension interface {
4546
extension.Extension
4647
ptrace.Unmarshaler
4748
}
49+
50+
// ProfilesMarshalerExtension is an extension that marshals profiles.
51+
type ProfilesMarshalerExtension interface {
52+
extension.Extension
53+
pprofile.Marshaler
54+
}
55+
56+
// ProfilesUnmarshalerExtension is an extension that unmarshals Profiles.
57+
type ProfilesUnmarshalerExtension interface {
58+
extension.Extension
59+
pprofile.Unmarshaler
60+
}

extension/encoding/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.22.0
55
require (
66
go.opentelemetry.io/collector/extension v0.113.0
77
go.opentelemetry.io/collector/pdata v1.19.0
8+
go.opentelemetry.io/collector/pdata/pprofile v0.113.0
89
)
910

1011
require (

extension/encoding/go.sum

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extension/encoding/jaegerencodingextension/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ require (
3333
github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.113.0 // indirect
3434
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
3535
go.opentelemetry.io/collector/config/configtelemetry v0.113.0 // indirect
36+
go.opentelemetry.io/collector/pdata/pprofile v0.113.0 // indirect
3637
go.opentelemetry.io/collector/semconv v0.113.0 // indirect
3738
go.opentelemetry.io/otel v1.32.0 // indirect
3839
go.opentelemetry.io/otel/metric v1.32.0 // indirect

extension/encoding/jaegerencodingextension/go.sum

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extension/encoding/jsonlogencodingextension/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ require (
2929
github.com/modern-go/reflect2 v1.0.2 // indirect
3030
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
3131
go.opentelemetry.io/collector/config/configtelemetry v0.113.0 // indirect
32+
go.opentelemetry.io/collector/pdata/pprofile v0.113.0 // indirect
3233
go.opentelemetry.io/otel v1.31.0 // indirect
3334
go.opentelemetry.io/otel/metric v1.31.0 // indirect
3435
go.opentelemetry.io/otel/sdk v1.31.0 // indirect

extension/encoding/jsonlogencodingextension/go.sum

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extension/encoding/otlpencodingextension/extension.go

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"go.opentelemetry.io/collector/component"
1111
"go.opentelemetry.io/collector/pdata/plog"
1212
"go.opentelemetry.io/collector/pdata/pmetric"
13+
"go.opentelemetry.io/collector/pdata/pprofile"
1314
"go.opentelemetry.io/collector/pdata/ptrace"
1415

1516
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding"
@@ -21,22 +22,26 @@ const (
2122
)
2223

2324
var (
24-
_ encoding.TracesMarshalerExtension = (*otlpExtension)(nil)
25-
_ encoding.TracesUnmarshalerExtension = (*otlpExtension)(nil)
26-
_ encoding.LogsMarshalerExtension = (*otlpExtension)(nil)
27-
_ encoding.LogsUnmarshalerExtension = (*otlpExtension)(nil)
28-
_ encoding.MetricsMarshalerExtension = (*otlpExtension)(nil)
29-
_ encoding.MetricsUnmarshalerExtension = (*otlpExtension)(nil)
25+
_ encoding.TracesMarshalerExtension = (*otlpExtension)(nil)
26+
_ encoding.TracesUnmarshalerExtension = (*otlpExtension)(nil)
27+
_ encoding.LogsMarshalerExtension = (*otlpExtension)(nil)
28+
_ encoding.LogsUnmarshalerExtension = (*otlpExtension)(nil)
29+
_ encoding.MetricsMarshalerExtension = (*otlpExtension)(nil)
30+
_ encoding.MetricsUnmarshalerExtension = (*otlpExtension)(nil)
31+
_ encoding.ProfilesMarshalerExtension = (*otlpExtension)(nil)
32+
_ encoding.ProfilesUnmarshalerExtension = (*otlpExtension)(nil)
3033
)
3134

3235
type otlpExtension struct {
33-
config *Config
34-
traceMarshaler ptrace.Marshaler
35-
traceUnmarshaler ptrace.Unmarshaler
36-
logMarshaler plog.Marshaler
37-
logUnmarshaler plog.Unmarshaler
38-
metricMarshaler pmetric.Marshaler
39-
metricUnmarshaler pmetric.Unmarshaler
36+
config *Config
37+
traceMarshaler ptrace.Marshaler
38+
traceUnmarshaler ptrace.Unmarshaler
39+
logMarshaler plog.Marshaler
40+
logUnmarshaler plog.Unmarshaler
41+
metricMarshaler pmetric.Marshaler
42+
metricUnmarshaler pmetric.Unmarshaler
43+
profileMarshaler pprofile.Marshaler
44+
profileUnmarshaler pprofile.Unmarshaler
4045
}
4146

4247
func newExtension(config *Config) (*otlpExtension, error) {
@@ -46,23 +51,27 @@ func newExtension(config *Config) (*otlpExtension, error) {
4651
switch protocol {
4752
case otlpProto:
4853
ex = &otlpExtension{
49-
config: config,
50-
traceMarshaler: &ptrace.ProtoMarshaler{},
51-
traceUnmarshaler: &ptrace.ProtoUnmarshaler{},
52-
logMarshaler: &plog.ProtoMarshaler{},
53-
logUnmarshaler: &plog.ProtoUnmarshaler{},
54-
metricMarshaler: &pmetric.ProtoMarshaler{},
55-
metricUnmarshaler: &pmetric.ProtoUnmarshaler{},
54+
config: config,
55+
traceMarshaler: &ptrace.ProtoMarshaler{},
56+
traceUnmarshaler: &ptrace.ProtoUnmarshaler{},
57+
logMarshaler: &plog.ProtoMarshaler{},
58+
logUnmarshaler: &plog.ProtoUnmarshaler{},
59+
metricMarshaler: &pmetric.ProtoMarshaler{},
60+
metricUnmarshaler: &pmetric.ProtoUnmarshaler{},
61+
profileMarshaler: &pprofile.ProtoMarshaler{},
62+
profileUnmarshaler: &pprofile.ProtoUnmarshaler{},
5663
}
5764
case otlpJSON:
5865
ex = &otlpExtension{
59-
config: config,
60-
traceMarshaler: &ptrace.JSONMarshaler{},
61-
traceUnmarshaler: &ptrace.JSONUnmarshaler{},
62-
logMarshaler: &plog.JSONMarshaler{},
63-
logUnmarshaler: &plog.JSONUnmarshaler{},
64-
metricMarshaler: &pmetric.JSONMarshaler{},
65-
metricUnmarshaler: &pmetric.JSONUnmarshaler{},
66+
config: config,
67+
traceMarshaler: &ptrace.JSONMarshaler{},
68+
traceUnmarshaler: &ptrace.JSONUnmarshaler{},
69+
logMarshaler: &plog.JSONMarshaler{},
70+
logUnmarshaler: &plog.JSONUnmarshaler{},
71+
metricMarshaler: &pmetric.JSONMarshaler{},
72+
metricUnmarshaler: &pmetric.JSONUnmarshaler{},
73+
profileMarshaler: &pprofile.JSONMarshaler{},
74+
profileUnmarshaler: &pprofile.JSONUnmarshaler{},
6675
}
6776
default:
6877
err = fmt.Errorf("unsupported protocol: %q", protocol)
@@ -95,6 +104,16 @@ func (ex *otlpExtension) MarshalLogs(logs plog.Logs) ([]byte, error) {
95104
return ex.logMarshaler.MarshalLogs(logs)
96105
}
97106

107+
// UnmarshalProfiles implements encoding.ProfilesUnmarshalerExtension.
108+
func (ex *otlpExtension) UnmarshalProfiles(buf []byte) (pprofile.Profiles, error) {
109+
return ex.profileUnmarshaler.UnmarshalProfiles(buf)
110+
}
111+
112+
// MarshalProfiles implements encoding.ProfilesMarshalerExtension.
113+
func (ex *otlpExtension) MarshalProfiles(profiles pprofile.Profiles) ([]byte, error) {
114+
return ex.profileMarshaler.MarshalProfiles(profiles)
115+
}
116+
98117
func (ex *otlpExtension) Start(_ context.Context, _ component.Host) error {
99118
return nil
100119
}

extension/encoding/otlpencodingextension/extension_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"go.opentelemetry.io/collector/pdata/pcommon"
1515
"go.opentelemetry.io/collector/pdata/plog"
1616
"go.opentelemetry.io/collector/pdata/pmetric"
17+
"go.opentelemetry.io/collector/pdata/pprofile"
1718
"go.opentelemetry.io/collector/pdata/ptrace"
1819
)
1920

@@ -73,30 +74,40 @@ func testOTLPMarshal(ex *otlpExtension, t *testing.T) {
7374
metrics := generateMetrics()
7475
_, err = ex.MarshalMetrics(metrics)
7576
require.NoError(t, err)
77+
78+
profiles := generateProfiles()
79+
_, err = ex.MarshalProfiles(profiles)
80+
require.NoError(t, err)
7681
}
7782

7883
func testOTLPUnmarshal(ex *otlpExtension, t *testing.T) {
7984
traces := generateTraces()
8085
logs := generateLogs()
8186
metrics := generateMetrics()
87+
profiles := generateProfiles()
8288

8389
traceBuf, err := ex.MarshalTraces(traces)
8490
require.NoError(t, err)
8591
logBuf, err := ex.MarshalLogs(logs)
8692
require.NoError(t, err)
8793
metricBuf, err := ex.MarshalMetrics(metrics)
8894
require.NoError(t, err)
95+
profileBuf, err := ex.MarshalProfiles(profiles)
96+
require.NoError(t, err)
8997

9098
traces0, err := ex.UnmarshalTraces(traceBuf)
9199
require.NoError(t, err)
92100
logs0, err := ex.UnmarshalLogs(logBuf)
93101
require.NoError(t, err)
94102
metrics0, err := ex.UnmarshalMetrics(metricBuf)
95103
require.NoError(t, err)
104+
profiles0, err := ex.UnmarshalProfiles(profileBuf)
105+
require.NoError(t, err)
96106

97107
require.Equal(t, traces0.ResourceSpans().Len(), traces.ResourceSpans().Len())
98108
require.Equal(t, logs0.ResourceLogs().Len(), logs.ResourceLogs().Len())
99109
require.Equal(t, metrics0.ResourceMetrics().Len(), metrics.ResourceMetrics().Len())
110+
require.Equal(t, profiles0.ResourceProfiles().Len(), profiles.ResourceProfiles().Len())
100111
}
101112

102113
func TestOTLPJSONMarshal(t *testing.T) {
@@ -181,3 +192,18 @@ func generateMetrics() pmetric.Metrics {
181192
}
182193
return md
183194
}
195+
196+
func generateProfiles() pprofile.Profiles {
197+
var num = 10
198+
now := time.Now()
199+
pd := pprofile.NewProfiles()
200+
ilm := pd.ResourceProfiles().AppendEmpty().ScopeProfiles().AppendEmpty()
201+
ilm.Profiles().EnsureCapacity(num)
202+
for i := 0; i < num; i++ {
203+
im := ilm.Profiles().AppendEmpty()
204+
im.SetProfileID(pprofile.ProfileID([16]byte{0x01, 0x02, 0x03, 0x04}))
205+
im.SetStartTime(pcommon.NewTimestampFromTime(now))
206+
im.SetEndTime(pcommon.NewTimestampFromTime(now))
207+
}
208+
return pd
209+
}

extension/encoding/otlpencodingextension/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require (
99
go.opentelemetry.io/collector/confmap v1.19.0
1010
go.opentelemetry.io/collector/extension v0.113.0
1111
go.opentelemetry.io/collector/pdata v1.19.0
12+
go.opentelemetry.io/collector/pdata/pprofile v0.113.0
1213
go.uber.org/goleak v1.3.0
1314
)
1415

extension/encoding/otlpencodingextension/go.sum

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extension/encoding/textencodingextension/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ require (
3030
github.com/modern-go/reflect2 v1.0.2 // indirect
3131
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
3232
go.opentelemetry.io/collector/config/configtelemetry v0.113.0 // indirect
33+
go.opentelemetry.io/collector/pdata/pprofile v0.113.0 // indirect
3334
go.opentelemetry.io/otel v1.32.0 // indirect
3435
go.opentelemetry.io/otel/metric v1.32.0 // indirect
3536
go.opentelemetry.io/otel/sdk v1.31.0 // indirect

extension/encoding/textencodingextension/go.sum

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extension/encoding/zipkinencodingextension/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ require (
3434
github.com/openzipkin/zipkin-go v0.4.3 // indirect
3535
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
3636
go.opentelemetry.io/collector/config/configtelemetry v0.113.0 // indirect
37+
go.opentelemetry.io/collector/pdata/pprofile v0.113.0 // indirect
3738
go.opentelemetry.io/collector/semconv v0.113.0 // indirect
3839
go.opentelemetry.io/otel v1.32.0 // indirect
3940
go.opentelemetry.io/otel/metric v1.32.0 // indirect

extension/encoding/zipkinencodingextension/go.sum

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)