Skip to content

Commit 4fceba5

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

File tree

2 files changed

+137
-0
lines changed

2 files changed

+137
-0
lines changed

internal/otlpjson/marshaler.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 marshaler struct {
29+
delegate jsonpb.Marshaler
30+
}
31+
32+
// NewTracesMarshaler returns a serializer.TracesUnmarshaler to marshal to OTLP json bytes.
33+
func NewTracesMarshaler() serializer.TracesMarshaler {
34+
return &marshaler{delegate: jsonpb.Marshaler{}}
35+
}
36+
37+
// NewMetricsMarshaler returns a serializer.MetricsMarshaler to marshal to OTLP json bytes.
38+
func NewMetricsMarshaler() serializer.MetricsMarshaler {
39+
return &marshaler{delegate: jsonpb.Marshaler{}}
40+
}
41+
42+
// NewLogsMarshaler returns a serializer.LogsMarshaler to marshal to OTLP json bytes.
43+
func NewLogsMarshaler() serializer.LogsMarshaler {
44+
return &marshaler{delegate: jsonpb.Marshaler{}}
45+
}
46+
47+
func (en *marshaler) MarshalLogs(model interface{}) ([]byte, error) {
48+
buf := bytes.Buffer{}
49+
if err := en.delegate.Marshal(&buf, model.(*otlpcollectorlogs.ExportLogsServiceRequest)); err != nil {
50+
return nil, err
51+
}
52+
return buf.Bytes(), nil
53+
}
54+
55+
func (en *marshaler) MarshalMetrics(model interface{}) ([]byte, error) {
56+
buf := bytes.Buffer{}
57+
if err := en.delegate.Marshal(&buf, model.(*otlpcollectormetrics.ExportMetricsServiceRequest)); err != nil {
58+
return nil, err
59+
}
60+
return buf.Bytes(), nil
61+
}
62+
63+
func (en *marshaler) MarshalTraces(model interface{}) ([]byte, error) {
64+
buf := bytes.Buffer{}
65+
if err := en.delegate.Marshal(&buf, model.(*otlpcollectortrace.ExportTraceServiceRequest)); err != nil {
66+
return nil, err
67+
}
68+
return buf.Bytes(), nil
69+
}

internal/otlpjson/unmarshaler.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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+
"go.opentelemetry.io/collector/consumer/pdata"
23+
"go.opentelemetry.io/collector/internal"
24+
"go.opentelemetry.io/collector/internal/model/serializer"
25+
)
26+
27+
type unmarshaler struct {
28+
delegate jsonpb.Unmarshaler
29+
}
30+
31+
// NewTracesUnmarshaler returns a serializer.TracesUnmarshaler to unmarshal from OTLP json bytes.
32+
func NewTracesUnmarshaler() serializer.TracesUnmarshaler {
33+
return &unmarshaler{delegate: jsonpb.Unmarshaler{}}
34+
}
35+
36+
// NewMetricsUnmarshaler returns a serializer.MetricsUnmarshaler to unmarshal from OTLP json bytes.
37+
func NewMetricsUnmarshaler() serializer.MetricsUnmarshaler {
38+
return &unmarshaler{delegate: jsonpb.Unmarshaler{}}
39+
}
40+
41+
// NewLogsUnmarshaler returns a serializer.LogsUnmarshaler to unmarshal from OTLP json bytes.
42+
func NewLogsUnmarshaler() serializer.LogsUnmarshaler {
43+
return &unmarshaler{delegate: jsonpb.Unmarshaler{}}
44+
}
45+
46+
func (d *unmarshaler) UnmarshalLogs(buf []byte) (interface{}, error) {
47+
ld := pdata.NewLogs()
48+
if err := d.delegate.Unmarshal(bytes.NewReader(buf), internal.LogsToOtlp(ld.InternalRep())); err != nil {
49+
return nil, err
50+
}
51+
return ld, nil
52+
}
53+
54+
func (d *unmarshaler) UnmarshalMetrics(buf []byte) (interface{}, error) {
55+
md := pdata.NewMetrics()
56+
if err := d.delegate.Unmarshal(bytes.NewReader(buf), internal.MetricsToOtlp(md.InternalRep())); err != nil {
57+
return nil, err
58+
}
59+
return md, nil
60+
}
61+
62+
func (d *unmarshaler) UnmarshalTraces(buf []byte) (interface{}, error) {
63+
td := pdata.NewTraces()
64+
if err := d.delegate.Unmarshal(bytes.NewReader(buf), internal.TracesToOtlp(td.InternalRep())); err != nil {
65+
return nil, err
66+
}
67+
return td, nil
68+
}

0 commit comments

Comments
 (0)