Skip to content

Commit 37fe601

Browse files
committed
Refactor encoding field in Config struct to remove pointer and update usage in exporter
feat: enhance OpenTelemetry collector configuration with Prometheus support and improved metrics handling
1 parent b529236 commit 37fe601

File tree

4 files changed

+37
-20
lines changed

4 files changed

+37
-20
lines changed

exporter/googlecloudstorageexporter/config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ var (
1818
)
1919

2020
type Config struct {
21-
Encoding *component.ID `mapstructure:"encoding"`
22-
Bucket bucketConfig `mapstructure:"bucket"`
21+
Encoding component.ID `mapstructure:"encoding"`
22+
Bucket bucketConfig `mapstructure:"bucket"`
2323
}
2424

2525
type bucketConfig struct {

exporter/googlecloudstorageexporter/config_test.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@ func TestValidate(t *testing.T) {
2828
{
2929
id: component.NewIDWithName(metadata.Type, ""),
3030
expected: &Config{
31-
Encoding: func() *component.ID {
32-
id := component.MustNewID("test")
33-
return &id
34-
}(),
31+
Encoding: component.MustNewID("test"),
3532
Bucket: bucketConfig{
3633
Name: "test-bucket",
3734
Region: "test-region",

exporter/googlecloudstorageexporter/exporter.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,18 +104,27 @@ func isBucketConflictError(err error) bool {
104104
func (s *storageExporter) Start(ctx context.Context, host component.Host) error {
105105
s.logsMarshaler = &plog.JSONMarshaler{}
106106
s.tracesMarshaler = &ptrace.JSONMarshaler{}
107-
if s.cfg.Encoding != nil {
108-
logsEncoding, err := loadExtension[plog.Marshaler](host, *s.cfg.Encoding, "logs marshaler")
109-
if err != nil {
110-
return fmt.Errorf("failed to load logs extension: %w", err)
107+
108+
s.logger.Info("GCS Exporter configuration", zap.String("encoding", s.cfg.Encoding.String()))
109+
110+
if s.cfg.Encoding.String() != "" {
111+
logsEncoding, errLogs := loadExtension[plog.Marshaler](host, s.cfg.Encoding, "logs marshaler")
112+
if errLogs == nil {
113+
s.logsMarshaler = logsEncoding
114+
} else {
115+
s.logger.Debug("Extension does not support logs marshaler", zap.Error(errLogs))
111116
}
112-
s.logsMarshaler = logsEncoding
113117

114-
tracesEncoding, err := loadExtension[ptrace.Marshaler](host, *s.cfg.Encoding, "traces marshaler")
115-
if err != nil {
116-
return fmt.Errorf("failed to load traces extension: %w", err)
118+
tracesEncoding, errTraces := loadExtension[ptrace.Marshaler](host, s.cfg.Encoding, "traces marshaler")
119+
if errTraces == nil {
120+
s.tracesMarshaler = tracesEncoding
121+
} else {
122+
s.logger.Debug("Extension does not support traces marshaler", zap.Error(errTraces))
123+
}
124+
125+
if errLogs != nil && errTraces != nil {
126+
return fmt.Errorf("failed to load extension %q: %w; %w", s.cfg.Encoding, errLogs, errTraces)
117127
}
118-
s.tracesMarshaler = tracesEncoding
119128
}
120129

121130
// TODO Add option for authenticator

exporter/googlecloudstorageexporter/exporter_test.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,12 @@ func TestStart(t *testing.T) {
128128

129129
encodingSucceedsID := "id_success"
130130
encodingFailsID := "id_fail"
131+
encodingLogsOnlyID := "id_logs_only"
131132
mHost := &mockHost{
132133
extensions: map[component.ID]component.Component{
133134
component.MustNewID(encodingFailsID): nil,
134135
component.MustNewID(encodingSucceedsID): &mockBothMarshaler{},
136+
component.MustNewID(encodingLogsOnlyID): &mockLogMarshaler{},
135137
},
136138
}
137139

@@ -149,22 +151,31 @@ func TestStart(t *testing.T) {
149151
require.Equal(t, &ptrace.JSONMarshaler{}, gcsExporter.tracesMarshaler)
150152
})
151153

152-
gcsExporter.cfg.Encoding = &id
154+
gcsExporter.cfg.Encoding = id
153155
t.Run("encoding id not present", func(t *testing.T) {
154156
err := gcsExporter.Start(t.Context(), mHost)
155157
require.ErrorContains(t, err, "unknown extension")
156158
})
157159

158160
id = component.MustNewID(encodingFailsID)
159161

160-
gcsExporter.cfg.Encoding = &id
162+
gcsExporter.cfg.Encoding = id
161163
t.Run("encoding id not a logs marshaler", func(t *testing.T) {
162164
err := gcsExporter.Start(t.Context(), mHost)
163165
require.ErrorContains(t, err, "is not a logs marshaler")
164166
})
165167

168+
id = component.MustNewID(encodingLogsOnlyID)
169+
gcsExporter.cfg.Encoding = id
170+
t.Run("encoding id only logs marshaler", func(t *testing.T) {
171+
err := gcsExporter.Start(t.Context(), mHost)
172+
require.NoError(t, err)
173+
require.IsType(t, &mockLogMarshaler{}, gcsExporter.logsMarshaler)
174+
require.IsType(t, &ptrace.JSONMarshaler{}, gcsExporter.tracesMarshaler)
175+
})
176+
166177
id = component.MustNewID(encodingSucceedsID)
167-
gcsExporter.cfg.Encoding = &id
178+
gcsExporter.cfg.Encoding = id
168179

169180
t.Run("create new bucket", func(t *testing.T) {
170181
err := gcsExporter.Start(t.Context(), mHost)
@@ -201,7 +212,7 @@ func TestUploadFile(t *testing.T) {
201212
Bucket: bucketConfig{
202213
Name: uploadBucketName,
203214
},
204-
Encoding: &id,
215+
Encoding: id,
205216
})
206217

207218
t.Run("empty content", func(t *testing.T) {
@@ -370,7 +381,7 @@ func TestConsumeTraces(t *testing.T) {
370381
Bucket: bucketConfig{
371382
Name: uploadBucketName,
372383
},
373-
Encoding: &id,
384+
Encoding: id,
374385
})
375386

376387
errStart := gcsExporter.Start(t.Context(), mHost)

0 commit comments

Comments
 (0)