Skip to content

Commit 1109943

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

File tree

4 files changed

+265
-0
lines changed

4 files changed

+265
-0
lines changed

internal/otlp/decoder.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 otlp
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"
26+
)
27+
28+
type decoder struct {
29+
delegate jsonpb.Unmarshaler
30+
}
31+
32+
// NewJSONTracesDecoder returns a serializer.TracesDecoder to decode from OTLP json bytes.
33+
func NewJSONTracesDecoder() model.TracesDecoder {
34+
return &decoder{delegate: jsonpb.Unmarshaler{}}
35+
}
36+
37+
// NewJSONMetricsDecoder returns a serializer.MetricsDecoder to decode from OTLP json bytes.
38+
func NewJSONMetricsDecoder() model.MetricsDecoder {
39+
return &decoder{delegate: jsonpb.Unmarshaler{}}
40+
}
41+
42+
// NewJSONLogsDecoder returns a serializer.LogsDecoder to decode from OTLP json bytes.
43+
func NewJSONLogsDecoder() model.LogsDecoder {
44+
return &decoder{delegate: jsonpb.Unmarshaler{}}
45+
}
46+
47+
func (d *decoder) DecodeLogs(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 *decoder) DecodeMetrics(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 *decoder) DecodeTraces(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+
}

internal/otlp/encoder.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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 otlp
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"
26+
)
27+
28+
type encoder struct {
29+
delegate jsonpb.Marshaler
30+
}
31+
32+
// NewJSONTracesEncoder returns a serializer.TracesUnmarshaler to encode to OTLP json bytes.
33+
func NewJSONTracesEncoder() model.TracesEncoder {
34+
return &encoder{delegate: jsonpb.Marshaler{}}
35+
}
36+
37+
// NewJSONMetricsEncoder returns a serializer.MetricsEncoder to encode to OTLP json bytes.
38+
func NewJSONMetricsEncoder() model.MetricsEncoder {
39+
return &encoder{delegate: jsonpb.Marshaler{}}
40+
}
41+
42+
// NewJSONLogsEncoder returns a serializer.LogsEncoder to encode to OTLP json bytes.
43+
func NewJSONLogsEncoder() model.LogsEncoder {
44+
return &encoder{delegate: jsonpb.Marshaler{}}
45+
}
46+
47+
func (e *encoder) EncodeLogs(modelData interface{}) ([]byte, error) {
48+
ld, ok := modelData.(*otlpcollectorlogs.ExportLogsServiceRequest)
49+
if !ok {
50+
return nil, model.NewErrIncompatibleType(&otlpcollectorlogs.ExportLogsServiceRequest{}, modelData)
51+
}
52+
buf := bytes.Buffer{}
53+
if err := e.delegate.Marshal(&buf, ld); err != nil {
54+
return nil, err
55+
}
56+
return buf.Bytes(), nil
57+
}
58+
59+
func (e *encoder) EncodeMetrics(modelData interface{}) ([]byte, error) {
60+
md, ok := modelData.(*otlpcollectormetrics.ExportMetricsServiceRequest)
61+
if !ok {
62+
return nil, model.NewErrIncompatibleType(&otlpcollectormetrics.ExportMetricsServiceRequest{}, modelData)
63+
}
64+
buf := bytes.Buffer{}
65+
if err := e.delegate.Marshal(&buf, md); err != nil {
66+
return nil, err
67+
}
68+
return buf.Bytes(), nil
69+
}
70+
71+
func (e *encoder) EncodeTraces(modelData interface{}) ([]byte, error) {
72+
td, ok := modelData.(*otlpcollectortrace.ExportTraceServiceRequest)
73+
if !ok {
74+
return nil, model.NewErrIncompatibleType(&otlpcollectortrace.ExportTraceServiceRequest{}, modelData)
75+
}
76+
buf := bytes.Buffer{}
77+
if err := e.delegate.Marshal(&buf, td); err != nil {
78+
return nil, err
79+
}
80+
return buf.Bytes(), nil
81+
}

internal/otlp/from_translator.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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 otlp
16+
17+
import (
18+
"go.opentelemetry.io/collector/consumer/pdata"
19+
"go.opentelemetry.io/collector/internal"
20+
"go.opentelemetry.io/collector/internal/model"
21+
)
22+
23+
type fromTranslator struct{}
24+
25+
// NewFromTracesTranslator returns a model.FromTracesTranslator to convert from pdata to OTLP data model.
26+
func NewFromTracesTranslator() model.FromTracesTranslator {
27+
return &fromTranslator{}
28+
}
29+
30+
// NewFromMetricsTranslator returns a model.FromMetricsTranslator to convert from pdata to OTLP data model.
31+
func NewFromMetricsTranslator() model.FromMetricsTranslator {
32+
return &fromTranslator{}
33+
}
34+
35+
// NewFromLogsTranslator returns a model.FromLogsTranslator to convert from pdata to OTLP data model.
36+
func NewFromLogsTranslator() model.FromLogsTranslator {
37+
return &fromTranslator{}
38+
}
39+
40+
func (d *fromTranslator) FromLogs(ld pdata.Logs) (interface{}, error) {
41+
return internal.LogsToOtlp(ld.InternalRep()), nil
42+
}
43+
44+
func (d *fromTranslator) FromMetrics(md pdata.Metrics) (interface{}, error) {
45+
return internal.MetricsToOtlp(md.InternalRep()), nil
46+
}
47+
48+
func (d *fromTranslator) FromTraces(td pdata.Traces) (interface{}, error) {
49+
return internal.TracesToOtlp(td.InternalRep()), nil
50+
}

internal/otlp/to_translator.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
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 otlp
16+
17+
import (
18+
"go.opentelemetry.io/collector/consumer/pdata"
19+
"go.opentelemetry.io/collector/internal"
20+
otlpcollectorlogs "go.opentelemetry.io/collector/internal/data/protogen/collector/logs/v1"
21+
otlpcollectormetrics "go.opentelemetry.io/collector/internal/data/protogen/collector/metrics/v1"
22+
otlpcollectortrace "go.opentelemetry.io/collector/internal/data/protogen/collector/trace/v1"
23+
"go.opentelemetry.io/collector/internal/model"
24+
)
25+
26+
type toTranslator struct{}
27+
28+
// NewToTracesTranslator returns a model.ToTracesTranslator to convert from OTLP data model to pdata.
29+
func NewToTracesTranslator() model.ToTracesTranslator {
30+
return &toTranslator{}
31+
}
32+
33+
// NewToMetricsTranslator returns a model.ToMetricsTranslator to convert from OTLP data model to pdata.
34+
func NewToMetricsTranslator() model.ToMetricsTranslator {
35+
return &toTranslator{}
36+
}
37+
38+
// NewToLogsTranslator returns a model.ToLogsTranslator to convert from OTLP data model to pdata.
39+
func NewToLogsTranslator() model.ToLogsTranslator {
40+
return &toTranslator{}
41+
}
42+
43+
func (d *toTranslator) ToLogs(modelData interface{}) (pdata.Logs, error) {
44+
ld, ok := modelData.(*otlpcollectorlogs.ExportLogsServiceRequest)
45+
if !ok {
46+
return pdata.Logs{}, model.NewErrIncompatibleType(&otlpcollectorlogs.ExportLogsServiceRequest{}, modelData)
47+
}
48+
return pdata.LogsFromInternalRep(internal.LogsFromOtlp(ld)), nil
49+
}
50+
51+
func (d *toTranslator) ToMetrics(modelData interface{}) (pdata.Metrics, error) {
52+
ld, ok := modelData.(*otlpcollectormetrics.ExportMetricsServiceRequest)
53+
if !ok {
54+
return pdata.Metrics{}, model.NewErrIncompatibleType(&otlpcollectormetrics.ExportMetricsServiceRequest{}, modelData)
55+
}
56+
return pdata.MetricsFromInternalRep(internal.MetricsFromOtlp(ld)), nil
57+
}
58+
59+
func (d *toTranslator) ToTraces(modelData interface{}) (pdata.Traces, error) {
60+
td, ok := modelData.(*otlpcollectortrace.ExportTraceServiceRequest)
61+
if !ok {
62+
return pdata.Traces{}, model.NewErrIncompatibleType(&otlpcollectortrace.ExportTraceServiceRequest{}, modelData)
63+
}
64+
return pdata.TracesFromInternalRep(internal.TracesFromOtlp(td)), nil
65+
}

0 commit comments

Comments
 (0)