Skip to content

Commit 74af245

Browse files
[chore] [receiver/datadog] Refactor translation files into internal package (open-telemetry#34160)
**Description:** This PR is a follow-up to open-telemetry#33957. It refactors the Datadog receiver files to remove internal methods and structures from the public API and into an internal directory. **Link to tracking Issue:** open-telemetry#18278 **Testing:** This is a refactor, so no new unit tests have been added.
1 parent aab1424 commit 74af245

11 files changed

+94
-88
lines changed

receiver/datadogreceiver/batcher.go renamed to receiver/datadogreceiver/internal/translator/batcher.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package datadogreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver"
4+
package translator // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver/internal/translator"
55

66
import (
77
"go.opentelemetry.io/collector/pdata/pcommon"
@@ -10,16 +10,16 @@ import (
1010
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/exp/metrics/identity"
1111
)
1212

13-
type Batcher struct {
13+
type batcher struct {
1414
pmetric.Metrics
1515

1616
resourceMetrics map[identity.Resource]pmetric.ResourceMetrics
1717
scopeMetrics map[identity.Scope]pmetric.ScopeMetrics
1818
metrics map[identity.Metric]pmetric.Metric
1919
}
2020

21-
func newBatcher() Batcher {
22-
return Batcher{
21+
func newBatcher() batcher {
22+
return batcher{
2323
Metrics: pmetric.NewMetrics(),
2424
resourceMetrics: make(map[identity.Resource]pmetric.ResourceMetrics),
2525
scopeMetrics: make(map[identity.Scope]pmetric.ScopeMetrics),
@@ -30,7 +30,7 @@ func newBatcher() Batcher {
3030
// Dimensions stores the properties of the series that are needed in order
3131
// to unique identify the series. This is needed in order to batch metrics by
3232
// resource, scope, and datapoint attributes
33-
type Dimensions struct {
33+
type dimensions struct {
3434
name string
3535
metricType pmetric.MetricType
3636
resourceAttrs pcommon.Map
@@ -47,9 +47,9 @@ var metricTypeMap = map[string]pmetric.MetricType{
4747
"sketch": pmetric.MetricTypeExponentialHistogram,
4848
}
4949

50-
func parseSeriesProperties(name string, metricType string, tags []string, host string, version string, stringPool *StringPool) Dimensions {
50+
func parseSeriesProperties(name string, metricType string, tags []string, host string, version string, stringPool *StringPool) dimensions {
5151
resourceAttrs, scopeAttrs, dpAttrs := tagsToAttributes(tags, host, stringPool)
52-
return Dimensions{
52+
return dimensions{
5353
name: name,
5454
metricType: metricTypeMap[metricType],
5555
buildInfo: version,
@@ -59,7 +59,7 @@ func parseSeriesProperties(name string, metricType string, tags []string, host s
5959
}
6060
}
6161

62-
func (b Batcher) Lookup(dim Dimensions) (pmetric.Metric, identity.Metric) {
62+
func (b batcher) Lookup(dim dimensions) (pmetric.Metric, identity.Metric) {
6363
resource := dim.Resource()
6464
resourceID := identity.OfResource(resource)
6565
resourceMetrics, ok := b.resourceMetrics[resourceID]
@@ -90,21 +90,21 @@ func (b Batcher) Lookup(dim Dimensions) (pmetric.Metric, identity.Metric) {
9090
return metric, metricID
9191
}
9292

93-
func (d Dimensions) Resource() pcommon.Resource {
93+
func (d dimensions) Resource() pcommon.Resource {
9494
resource := pcommon.NewResource()
9595
d.resourceAttrs.CopyTo(resource.Attributes()) // TODO(jesus.vazquez) review this copy
9696
return resource
9797
}
9898

99-
func (d Dimensions) Scope() pcommon.InstrumentationScope {
99+
func (d dimensions) Scope() pcommon.InstrumentationScope {
100100
scope := pcommon.NewInstrumentationScope()
101101
scope.SetName("otelcol/datadogreceiver")
102102
scope.SetVersion(d.buildInfo)
103103
d.scopeAttrs.CopyTo(scope.Attributes())
104104
return scope
105105
}
106106

107-
func (d Dimensions) Metric() pmetric.Metric {
107+
func (d dimensions) Metric() pmetric.Metric {
108108
metric := pmetric.NewMetric()
109109
metric.SetName(d.name)
110110
switch d.metricType {

receiver/datadogreceiver/batcher_test.go renamed to receiver/datadogreceiver/internal/translator/batcher_test.go

+3-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package datadogreceiver
4+
package translator
55

66
import (
77
"testing"
88

99
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV1"
1010
"github.com/stretchr/testify/require"
11-
"go.opentelemetry.io/collector/component"
1211
"go.opentelemetry.io/collector/pdata/pmetric"
1312
)
1413

@@ -275,13 +274,8 @@ func TestMetricBatcher(t *testing.T) {
275274

276275
for _, tt := range tests {
277276
t.Run(tt.name, func(t *testing.T) {
278-
mt := newMetricsTranslator()
279-
mt.buildInfo = component.BuildInfo{
280-
Command: "otelcol",
281-
Description: "OpenTelemetry Collector",
282-
Version: "latest",
283-
}
284-
result := mt.translateMetricsV1(tt.series)
277+
mt := createMetricsTranslator()
278+
result := mt.TranslateSeriesV1(tt.series)
285279

286280
tt.expect(t, result)
287281
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package translator // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver/internal/translator"
5+
6+
import (
7+
"sync"
8+
9+
"go.opentelemetry.io/collector/component"
10+
"go.opentelemetry.io/collector/pdata/pcommon"
11+
12+
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/exp/metrics/identity"
13+
)
14+
15+
type MetricsTranslator struct {
16+
sync.RWMutex
17+
buildInfo component.BuildInfo
18+
lastTs map[identity.Stream]pcommon.Timestamp
19+
stringPool *StringPool
20+
}
21+
22+
func NewMetricsTranslator(buildInfo component.BuildInfo) *MetricsTranslator {
23+
return &MetricsTranslator{
24+
buildInfo: buildInfo,
25+
lastTs: make(map[identity.Stream]pcommon.Timestamp),
26+
stringPool: newStringPool(),
27+
}
28+
}
29+
30+
func (mt *MetricsTranslator) streamHasTimestamp(stream identity.Stream) (pcommon.Timestamp, bool) {
31+
mt.RLock()
32+
defer mt.RUnlock()
33+
ts, ok := mt.lastTs[stream]
34+
return ts, ok
35+
}
36+
37+
func (mt *MetricsTranslator) updateLastTsForStream(stream identity.Stream, ts pcommon.Timestamp) {
38+
mt.Lock()
39+
defer mt.Unlock()
40+
mt.lastTs[stream] = ts
41+
}

receiver/datadogreceiver/metrics_translator.go renamed to receiver/datadogreceiver/internal/translator/series.go

+2-31
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,18 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package datadogreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver"
4+
package translator // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver/internal/translator"
55

66
import (
7-
"sync"
87
"time"
98

109
datadogV1 "github.com/DataDog/datadog-api-client-go/v2/api/datadogV1"
11-
"go.opentelemetry.io/collector/component"
1210
"go.opentelemetry.io/collector/pdata/pcommon"
1311
"go.opentelemetry.io/collector/pdata/pmetric"
1412

1513
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/exp/metrics/identity"
1614
)
1715

18-
type MetricsTranslator struct {
19-
sync.RWMutex
20-
buildInfo component.BuildInfo
21-
lastTs map[identity.Stream]pcommon.Timestamp
22-
stringPool *StringPool
23-
}
24-
25-
func newMetricsTranslator() *MetricsTranslator {
26-
return &MetricsTranslator{
27-
lastTs: make(map[identity.Stream]pcommon.Timestamp),
28-
stringPool: newStringPool(),
29-
}
30-
}
31-
32-
func (mt *MetricsTranslator) streamHasTimestamp(stream identity.Stream) (pcommon.Timestamp, bool) {
33-
mt.RLock()
34-
defer mt.RUnlock()
35-
ts, ok := mt.lastTs[stream]
36-
return ts, ok
37-
}
38-
39-
func (mt *MetricsTranslator) updateLastTsForStream(stream identity.Stream, ts pcommon.Timestamp) {
40-
mt.Lock()
41-
defer mt.Unlock()
42-
mt.lastTs[stream] = ts
43-
}
44-
4516
const (
4617
TypeGauge string = "gauge"
4718
TypeRate string = "rate"
@@ -52,7 +23,7 @@ type SeriesList struct {
5223
Series []datadogV1.Series `json:"series"`
5324
}
5425

55-
func (mt *MetricsTranslator) translateMetricsV1(series SeriesList) pmetric.Metrics {
26+
func (mt *MetricsTranslator) TranslateSeriesV1(series SeriesList) pmetric.Metrics {
5627
bt := newBatcher()
5728

5829
for _, serie := range series.Series {

receiver/datadogreceiver/metrics_translator_test.go renamed to receiver/datadogreceiver/internal/translator/series_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package datadogreceiver
4+
package translator
55

66
import (
77
"testing"
@@ -28,7 +28,7 @@ func testPointsToDatadogPoints(points []testPoint) [][]*float64 {
2828

2929
}
3030

31-
func TestTranslateMetricsV1(t *testing.T) {
31+
func TestTranslateSeriesV1(t *testing.T) {
3232
tests := []struct {
3333
name string
3434

@@ -152,7 +152,7 @@ func TestTranslateMetricsV1(t *testing.T) {
152152
for _, tt := range tests {
153153
t.Run(tt.name, func(t *testing.T) {
154154
mt := createMetricsTranslator()
155-
result := mt.translateMetricsV1(tt.series)
155+
result := mt.TranslateSeriesV1(tt.series)
156156

157157
tt.expect(t, result)
158158
})

receiver/datadogreceiver/tags.go renamed to receiver/datadogreceiver/internal/translator/tags.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package datadogreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver"
4+
package translator // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver/internal/translator"
55

66
import (
77
"fmt"

receiver/datadogreceiver/tags_test.go renamed to receiver/datadogreceiver/internal/translator/tags_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package datadogreceiver
4+
package translator
55

66
import (
77
"testing"

receiver/datadogreceiver/testutil.go renamed to receiver/datadogreceiver/internal/translator/testutil.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package datadogreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver"
4+
package translator // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver/internal/translator"
55

66
import (
77
"testing"
@@ -13,12 +13,11 @@ import (
1313
)
1414

1515
func createMetricsTranslator() *MetricsTranslator {
16-
mt := newMetricsTranslator()
17-
mt.buildInfo = component.BuildInfo{
16+
mt := NewMetricsTranslator(component.BuildInfo{
1817
Command: "otelcol",
1918
Description: "OpenTelemetry Collector",
2019
Version: "latest",
21-
}
20+
})
2221
return mt
2322
}
2423

receiver/datadogreceiver/traces_translator.go renamed to receiver/datadogreceiver/internal/translator/traces_translator.go

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package datadogreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver"
4+
package translator // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver/internal/translator"
55

66
import (
77
"bytes"
@@ -51,7 +51,7 @@ func upsertHeadersAttributes(req *http.Request, attrs pcommon.Map) {
5151
}
5252
}
5353

54-
func toTraces(payload *pb.TracerPayload, req *http.Request) ptrace.Traces {
54+
func ToTraces(payload *pb.TracerPayload, req *http.Request) ptrace.Traces {
5555
var traces pb.Traces
5656
for _, p := range payload.GetChunks() {
5757
traces = append(traces, p.GetSpans())
@@ -161,17 +161,17 @@ var bufferPool = sync.Pool{
161161
},
162162
}
163163

164-
func getBuffer() *bytes.Buffer {
164+
func GetBuffer() *bytes.Buffer {
165165
buffer := bufferPool.Get().(*bytes.Buffer)
166166
buffer.Reset()
167167
return buffer
168168
}
169169

170-
func putBuffer(buffer *bytes.Buffer) {
170+
func PutBuffer(buffer *bytes.Buffer) {
171171
bufferPool.Put(buffer)
172172
}
173173

174-
func handleTracesPayload(req *http.Request) (tp []*pb.TracerPayload, err error) {
174+
func HandleTracesPayload(req *http.Request) (tp []*pb.TracerPayload, err error) {
175175
var tracerPayloads []*pb.TracerPayload
176176

177177
defer func() {
@@ -181,8 +181,8 @@ func handleTracesPayload(req *http.Request) (tp []*pb.TracerPayload, err error)
181181

182182
switch {
183183
case strings.HasPrefix(req.URL.Path, "/v0.7"):
184-
buf := getBuffer()
185-
defer putBuffer(buf)
184+
buf := GetBuffer()
185+
defer PutBuffer(buf)
186186
if _, err = io.Copy(buf, req.Body); err != nil {
187187
return nil, err
188188
}
@@ -193,8 +193,8 @@ func handleTracesPayload(req *http.Request) (tp []*pb.TracerPayload, err error)
193193

194194
tracerPayloads = append(tracerPayloads, &tracerPayload)
195195
case strings.HasPrefix(req.URL.Path, "/v0.5"):
196-
buf := getBuffer()
197-
defer putBuffer(buf)
196+
buf := GetBuffer()
197+
defer PutBuffer(buf)
198198
if _, err = io.Copy(buf, req.Body); err != nil {
199199
return nil, err
200200
}
@@ -229,8 +229,8 @@ func handleTracesPayload(req *http.Request) (tp []*pb.TracerPayload, err error)
229229
}
230230
tracerPayloads = append(tracerPayloads, tracerPayload)
231231
case strings.HasPrefix(req.URL.Path, "/api/v0.2"):
232-
buf := getBuffer()
233-
defer putBuffer(buf)
232+
buf := GetBuffer()
233+
defer PutBuffer(buf)
234234
if _, err = io.Copy(buf, req.Body); err != nil {
235235
return nil, err
236236
}
@@ -265,8 +265,8 @@ func handleTracesPayload(req *http.Request) (tp []*pb.TracerPayload, err error)
265265
func decodeRequest(req *http.Request, dest *pb.Traces) (err error) {
266266
switch mediaType := getMediaType(req); mediaType {
267267
case "application/msgpack":
268-
buf := getBuffer()
269-
defer putBuffer(buf)
268+
buf := GetBuffer()
269+
defer PutBuffer(buf)
270270
_, err = io.Copy(buf, req.Body)
271271
if err != nil {
272272
return err
@@ -283,8 +283,8 @@ func decodeRequest(req *http.Request, dest *pb.Traces) (err error) {
283283
default:
284284
// do our best
285285
if err1 := json.NewDecoder(req.Body).Decode(&dest); err1 != nil {
286-
buf := getBuffer()
287-
defer putBuffer(buf)
286+
buf := GetBuffer()
287+
defer PutBuffer(buf)
288288
_, err2 := io.Copy(buf, req.Body)
289289
if err2 != nil {
290290
return err2

0 commit comments

Comments
 (0)