Skip to content

Commit 58fa0a1

Browse files
committed
Add otlpjson as a serializer implementation
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
1 parent fe57963 commit 58fa0a1

File tree

2 files changed

+151
-0
lines changed

2 files changed

+151
-0
lines changed

internal/otlpjson/marshaler.go

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// Copyright The OpenTelemetry Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package otlpjson
16+
17+
import (
18+
"bytes"
19+
20+
"github.com/gogo/protobuf/jsonpb"
21+
22+
otlpcollectorlogs "go.opentelemetry.io/collector/internal/data/protogen/collector/logs/v1"
23+
otlpcollectormetrics "go.opentelemetry.io/collector/internal/data/protogen/collector/metrics/v1"
24+
otlpcollectortrace "go.opentelemetry.io/collector/internal/data/protogen/collector/trace/v1"
25+
"go.opentelemetry.io/collector/internal/model/serializer"
26+
"go.opentelemetry.io/collector/internal/model/translator"
27+
)
28+
29+
type marshaler struct {
30+
delegate jsonpb.Marshaler
31+
}
32+
33+
// NewTracesMarshaler returns a serializer.TracesUnmarshaler to marshal to OTLP json bytes.
34+
func NewTracesMarshaler() serializer.TracesMarshaler {
35+
return &marshaler{delegate: jsonpb.Marshaler{}}
36+
}
37+
38+
// NewMetricsMarshaler returns a serializer.MetricsMarshaler to marshal to OTLP json bytes.
39+
func NewMetricsMarshaler() serializer.MetricsMarshaler {
40+
return &marshaler{delegate: jsonpb.Marshaler{}}
41+
}
42+
43+
// NewLogsMarshaler returns a serializer.LogsMarshaler to marshal to OTLP json bytes.
44+
func NewLogsMarshaler() serializer.LogsMarshaler {
45+
return &marshaler{delegate: jsonpb.Marshaler{}}
46+
}
47+
48+
func (en *marshaler) MarshalLogs(model interface{}) ([]byte, error) {
49+
ld, ok := model.(*otlpcollectorlogs.ExportLogsServiceRequest)
50+
if !ok {
51+
return nil, translator.NewErrIncompatibleType(&otlpcollectorlogs.ExportLogsServiceRequest{}, model)
52+
}
53+
buf := bytes.Buffer{}
54+
if err := en.delegate.Marshal(&buf, ld); err != nil {
55+
return nil, err
56+
}
57+
return buf.Bytes(), nil
58+
}
59+
60+
func (en *marshaler) MarshalMetrics(model interface{}) ([]byte, error) {
61+
md, ok := model.(*otlpcollectormetrics.ExportMetricsServiceRequest)
62+
if !ok {
63+
return nil, translator.NewErrIncompatibleType(&otlpcollectormetrics.ExportMetricsServiceRequest{}, model)
64+
}
65+
buf := bytes.Buffer{}
66+
if err := en.delegate.Marshal(&buf, md); err != nil {
67+
return nil, err
68+
}
69+
return buf.Bytes(), nil
70+
}
71+
72+
func (en *marshaler) MarshalTraces(model interface{}) ([]byte, error) {
73+
td, ok := model.(*otlpcollectortrace.ExportTraceServiceRequest)
74+
if !ok {
75+
return nil, translator.NewErrIncompatibleType(&otlpcollectortrace.ExportTraceServiceRequest{}, model)
76+
}
77+
buf := bytes.Buffer{}
78+
if err := en.delegate.Marshal(&buf, td); err != nil {
79+
return nil, err
80+
}
81+
return buf.Bytes(), nil
82+
}

internal/otlpjson/unmarshaler.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// Copyright The OpenTelemetry Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package otlpjson
16+
17+
import (
18+
"bytes"
19+
20+
"github.com/gogo/protobuf/jsonpb"
21+
22+
otlpcollectorlogs "go.opentelemetry.io/collector/internal/data/protogen/collector/logs/v1"
23+
otlpcollectormetrics "go.opentelemetry.io/collector/internal/data/protogen/collector/metrics/v1"
24+
otlpcollectortrace "go.opentelemetry.io/collector/internal/data/protogen/collector/trace/v1"
25+
"go.opentelemetry.io/collector/internal/model/serializer"
26+
)
27+
28+
type unmarshaler struct {
29+
delegate jsonpb.Unmarshaler
30+
}
31+
32+
// NewTracesUnmarshaler returns a serializer.TracesUnmarshaler to unmarshal from OTLP json bytes.
33+
func NewTracesUnmarshaler() serializer.TracesUnmarshaler {
34+
return &unmarshaler{delegate: jsonpb.Unmarshaler{}}
35+
}
36+
37+
// NewMetricsUnmarshaler returns a serializer.MetricsUnmarshaler to unmarshal from OTLP json bytes.
38+
func NewMetricsUnmarshaler() serializer.MetricsUnmarshaler {
39+
return &unmarshaler{delegate: jsonpb.Unmarshaler{}}
40+
}
41+
42+
// NewLogsUnmarshaler returns a serializer.LogsUnmarshaler to unmarshal from OTLP json bytes.
43+
func NewLogsUnmarshaler() serializer.LogsUnmarshaler {
44+
return &unmarshaler{delegate: jsonpb.Unmarshaler{}}
45+
}
46+
47+
func (d *unmarshaler) UnmarshalLogs(buf []byte) (interface{}, error) {
48+
ld := &otlpcollectorlogs.ExportLogsServiceRequest{}
49+
if err := d.delegate.Unmarshal(bytes.NewReader(buf), ld); err != nil {
50+
return nil, err
51+
}
52+
return ld, nil
53+
}
54+
55+
func (d *unmarshaler) UnmarshalMetrics(buf []byte) (interface{}, error) {
56+
md := &otlpcollectormetrics.ExportMetricsServiceRequest{}
57+
if err := d.delegate.Unmarshal(bytes.NewReader(buf), md); err != nil {
58+
return nil, err
59+
}
60+
return md, nil
61+
}
62+
63+
func (d *unmarshaler) UnmarshalTraces(buf []byte) (interface{}, error) {
64+
td := &otlpcollectortrace.ExportTraceServiceRequest{}
65+
if err := d.delegate.Unmarshal(bytes.NewReader(buf), td); err != nil {
66+
return nil, err
67+
}
68+
return td, nil
69+
}

0 commit comments

Comments
 (0)