Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add SetDataType and remove Set for every type #1684

Merged
merged 1 commit into from
Aug 31, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 20 additions & 52 deletions consumer/pdata/metric.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,9 @@ func (mdt MetricDataType) String() string {
return ""
}

// Type returns the type of the data for this Metric.
// DataType returns the type of the data for this Metric.
// Calling this function on zero-initialized Metric will cause a panic.
func (ms Metric) DataType() MetricDataType {
if *ms.orig == nil || (*ms.orig).Data == nil {
return MetricDataTypeNone
}
switch (*ms.orig).Data.(type) {
case *otlpmetrics.Metric_IntGauge:
return MetricDataTypeIntGauge
Expand All @@ -99,6 +96,25 @@ func (ms Metric) DataType() MetricDataType {
return MetricDataTypeNone
}

// SetDataType clears any existing data and initialize it with an empty data of the given type.
// Calling this function on zero-initialized Metric will cause a panic.
func (ms Metric) SetDataType(ty MetricDataType) {
switch ty {
case MetricDataTypeIntGauge:
(*ms.orig).Data = &otlpmetrics.Metric_IntGauge{}
case MetricDataTypeDoubleGauge:
(*ms.orig).Data = &otlpmetrics.Metric_DoubleGauge{}
case MetricDataTypeIntSum:
(*ms.orig).Data = &otlpmetrics.Metric_IntSum{}
case MetricDataTypeDoubleSum:
(*ms.orig).Data = &otlpmetrics.Metric_DoubleSum{}
case MetricDataTypeIntHistogram:
(*ms.orig).Data = &otlpmetrics.Metric_IntHistogram{}
case MetricDataTypeDoubleHistogram:
(*ms.orig).Data = &otlpmetrics.Metric_DoubleHistogram{}
}
}

// IntGauge returns the data as IntGauge. This should be called iff DataType() == MetricDataTypeIntGauge.
// Calling this function on zero-initialized Metric will cause a panic.
func (ms Metric) IntGauge() IntGauge {
Expand Down Expand Up @@ -153,54 +169,6 @@ func (ms Metric) DoubleHistogram() DoubleHistogram {
return NewDoubleHistogram()
}

// SetIntGauge replaces the metric data with the given IntGauge.
// Calling this function on zero-initialized Metric will cause a panic.
func (ms Metric) SetIntGauge(data IntGauge) {
(*ms.orig).Data = &otlpmetrics.Metric_IntGauge{
IntGauge: *data.orig,
}
}

// SetDoubleGauge replaces the metric data with the given DoubleGauge.
// Calling this function on zero-initialized Metric will cause a panic.
func (ms Metric) SetDoubleGauge(data DoubleGauge) {
(*ms.orig).Data = &otlpmetrics.Metric_DoubleGauge{
DoubleGauge: *data.orig,
}
}

// SetIntSum replaces the metric data with the given IntSum.
// Calling this function on zero-initialized Metric will cause a panic.
func (ms Metric) SetIntSum(data IntSum) {
(*ms.orig).Data = &otlpmetrics.Metric_IntSum{
IntSum: *data.orig,
}
}

// SetDoubleSum replaces the metric data with the given DoubleSum.
// Calling this function on zero-initialized Metric will cause a panic.
func (ms Metric) SetDoubleSum(data DoubleSum) {
(*ms.orig).Data = &otlpmetrics.Metric_DoubleSum{
DoubleSum: *data.orig,
}
}

// SetIntHistogram replaces the metric data with the given IntHistogram.
// Calling this function on zero-initialized Metric will cause a panic.
func (ms Metric) SetIntHistogram(data IntHistogram) {
(*ms.orig).Data = &otlpmetrics.Metric_IntHistogram{
IntHistogram: *data.orig,
}
}

// SetDoubleHistogram replaces the metric data with the given DoubleHistogram.
// Calling this function on zero-initialized Metric will cause a panic.
func (ms Metric) SetDoubleHistogram(data DoubleHistogram) {
(*ms.orig).Data = &otlpmetrics.Metric_DoubleHistogram{
DoubleHistogram: *data.orig,
}
}

func copyData(src, dest *otlpmetrics.Metric) {
switch (src).Data.(type) {
case *otlpmetrics.Metric_IntGauge:
Expand Down
26 changes: 26 additions & 0 deletions consumer/pdata/metric_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,32 @@ func TestCopyData(t *testing.T) {
}
}

func TestDataType(t *testing.T) {
m := NewMetric()
m.InitEmpty()
assert.Equal(t, MetricDataTypeNone, m.DataType())
m.SetDataType(MetricDataTypeIntGauge)
assert.Equal(t, MetricDataTypeIntGauge, m.DataType())
assert.True(t, m.IntGauge().IsNil())
m.SetDataType(MetricDataTypeDoubleGauge)
assert.Equal(t, MetricDataTypeDoubleGauge, m.DataType())
assert.True(t, m.DoubleGauge().IsNil())
m.SetDataType(MetricDataTypeIntSum)
assert.Equal(t, MetricDataTypeIntSum, m.DataType())
assert.True(t, m.IntSum().IsNil())
m.SetDataType(MetricDataTypeDoubleSum)
assert.Equal(t, MetricDataTypeDoubleSum, m.DataType())
assert.True(t, m.DoubleSum().IsNil())
m.SetDataType(MetricDataTypeIntHistogram)
assert.Equal(t, MetricDataTypeIntHistogram, m.DataType())
assert.True(t, m.IntHistogram().IsNil())
m.SetDataType(MetricDataTypeDoubleHistogram)
assert.Equal(t, MetricDataTypeDoubleHistogram, m.DataType())
assert.True(t, m.DoubleHistogram().IsNil())
m.InitEmpty()
assert.Equal(t, MetricDataTypeNone, m.DataType())
}

func TestResourceMetricsWireCompatibility(t *testing.T) {
// This test verifies that OTLP ProtoBufs generated using goproto lib in
// opentelemetry-proto repository OTLP ProtoBufs generated using gogoproto lib in
Expand Down
17 changes: 9 additions & 8 deletions internal/data/metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,13 @@ func TestMetricSize(t *testing.T) {
rms.Resize(1)
rms.At(0).InstrumentationLibraryMetrics().Resize(1)
rms.At(0).InstrumentationLibraryMetrics().At(0).Metrics().Resize(1)
doubleHistogram := pdata.NewDoubleHistogram()
metric := rms.At(0).InstrumentationLibraryMetrics().At(0).Metrics().At(0)
metric.SetDataType(pdata.MetricDataTypeDoubleHistogram)
doubleHistogram := metric.DoubleHistogram()
doubleHistogram.InitEmpty()
doubleHistogram.DataPoints().Resize(1)
doubleHistogram.DataPoints().At(0).SetCount(123)
doubleHistogram.DataPoints().At(0).SetSum(123)
rms.At(0).InstrumentationLibraryMetrics().At(0).Metrics().At(0).SetDoubleHistogram(doubleHistogram)
otlp := MetricDataToOtlp(md)
size := 0
sizeBytes := 0
Expand Down Expand Up @@ -124,10 +125,10 @@ func TestMetricAndDataPointCount(t *testing.T) {
ms, dps = md.MetricAndDataPointCount()
assert.EqualValues(t, 1, ms)
assert.EqualValues(t, 0, dps)
intSum := pdata.NewIntSum()
ilms.At(0).Metrics().At(0).SetDataType(pdata.MetricDataTypeIntSum)
intSum := ilms.At(0).Metrics().At(0).IntSum()
intSum.InitEmpty()
intSum.DataPoints().Resize(3)
ilms.At(0).Metrics().At(0).SetIntSum(intSum)
_, dps = md.MetricAndDataPointCount()
assert.EqualValues(t, 3, dps)

Expand All @@ -144,14 +145,14 @@ func TestMetricAndDataPointCount(t *testing.T) {
ms, dps = md.MetricAndDataPointCount()
assert.EqualValues(t, 6, ms)
assert.EqualValues(t, 0, dps)
doubleGauge := pdata.NewDoubleGauge()
ilms.At(0).Metrics().At(1).SetDataType(pdata.MetricDataTypeDoubleGauge)
doubleGauge := ilms.At(0).Metrics().At(1).DoubleGauge()
doubleGauge.InitEmpty()
doubleGauge.DataPoints().Resize(1)
ilms.At(0).Metrics().At(1).SetDoubleGauge(doubleGauge)
intHistogram := pdata.NewIntHistogram()
ilms.At(0).Metrics().At(3).SetDataType(pdata.MetricDataTypeIntHistogram)
intHistogram := ilms.At(0).Metrics().At(3).IntHistogram()
intHistogram.InitEmpty()
intHistogram.DataPoints().Resize(3)
ilms.At(0).Metrics().At(3).SetIntHistogram(intHistogram)
ms, dps = md.MetricAndDataPointCount()
assert.EqualValues(t, 6, ms)
assert.EqualValues(t, 4, dps)
Expand Down
41 changes: 17 additions & 24 deletions internal/data/testdata/metric.go
Original file line number Diff line number Diff line change
Expand Up @@ -597,37 +597,30 @@ func initMetric(m pdata.Metric, name string, ty pdata.MetricDataType) {
m.SetName(name)
m.SetDescription("")
m.SetUnit("1")
m.SetDataType(ty)
switch ty {
case pdata.MetricDataTypeIntGauge:
md := pdata.NewIntGauge()
md.InitEmpty()
m.SetIntGauge(md)
m.IntGauge().InitEmpty()
case pdata.MetricDataTypeDoubleGauge:
md := pdata.NewDoubleGauge()
md.InitEmpty()
m.SetDoubleGauge(md)
m.DoubleGauge().InitEmpty()
case pdata.MetricDataTypeIntSum:
md := pdata.NewIntSum()
md.InitEmpty()
md.SetIsMonotonic(true)
md.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
m.SetIntSum(md)
sum := m.IntSum()
sum.InitEmpty()
sum.SetIsMonotonic(true)
sum.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
case pdata.MetricDataTypeDoubleSum:
md := pdata.NewDoubleSum()
md.InitEmpty()
md.SetIsMonotonic(true)
md.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
m.SetDoubleSum(md)
sum := m.DoubleSum()
sum.InitEmpty()
sum.SetIsMonotonic(true)
sum.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
case pdata.MetricDataTypeIntHistogram:
md := pdata.NewIntHistogram()
md.InitEmpty()
md.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
m.SetIntHistogram(md)
histo := m.IntHistogram()
histo.InitEmpty()
histo.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
case pdata.MetricDataTypeDoubleHistogram:
md := pdata.NewDoubleHistogram()
md.InitEmpty()
md.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
m.SetDoubleHistogram(md)
histo := m.DoubleHistogram()
histo.InitEmpty()
histo.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
}
}

Expand Down
38 changes: 18 additions & 20 deletions translator/internaldata/oc_to_metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,38 +165,36 @@ func descriptorTypeToMetrics(t ocmetrics.MetricDescriptor_Type, metric pdata.Met
switch t {
case ocmetrics.MetricDescriptor_GAUGE_INT64:
metric.InitEmpty()
md := pdata.NewIntGauge()
md.InitEmpty()
metric.SetIntGauge(md)
metric.SetDataType(pdata.MetricDataTypeIntGauge)
metric.IntGauge().InitEmpty()
return pdata.MetricDataTypeIntGauge
case ocmetrics.MetricDescriptor_GAUGE_DOUBLE:
metric.InitEmpty()
md := pdata.NewDoubleGauge()
md.InitEmpty()
metric.SetDoubleGauge(md)
metric.SetDataType(pdata.MetricDataTypeDoubleGauge)
metric.DoubleGauge().InitEmpty()
return pdata.MetricDataTypeDoubleGauge
case ocmetrics.MetricDescriptor_CUMULATIVE_INT64:
metric.InitEmpty()
md := pdata.NewIntSum()
md.InitEmpty()
md.SetIsMonotonic(true)
md.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
metric.SetIntSum(md)
metric.SetDataType(pdata.MetricDataTypeIntSum)
sum := metric.IntSum()
sum.InitEmpty()
sum.SetIsMonotonic(true)
sum.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
return pdata.MetricDataTypeIntSum
case ocmetrics.MetricDescriptor_CUMULATIVE_DOUBLE:
metric.InitEmpty()
md := pdata.NewDoubleSum()
md.InitEmpty()
md.SetIsMonotonic(true)
md.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
metric.SetDoubleSum(md)
metric.SetDataType(pdata.MetricDataTypeDoubleSum)
sum := metric.DoubleSum()
sum.InitEmpty()
sum.SetIsMonotonic(true)
sum.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
return pdata.MetricDataTypeDoubleSum
case ocmetrics.MetricDescriptor_CUMULATIVE_DISTRIBUTION:
metric.InitEmpty()
md := pdata.NewDoubleHistogram()
md.InitEmpty()
md.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
metric.SetDoubleHistogram(md)
metric.SetDataType(pdata.MetricDataTypeDoubleHistogram)
histo := metric.DoubleHistogram()
histo.InitEmpty()
histo.SetAggregationTemporality(pdata.AggregationTemporalityCumulative)
return pdata.MetricDataTypeDoubleHistogram
}
// For the moment MetricDescriptor_SUMMARY is not supported
Expand Down
7 changes: 5 additions & 2 deletions translator/internaldata/oc_to_metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/stretchr/testify/assert"

"go.opentelemetry.io/collector/consumer/consumerdata"
"go.opentelemetry.io/collector/consumer/pdata"
"go.opentelemetry.io/collector/internal/data"
"go.opentelemetry.io/collector/internal/data/testdata"
)
Expand All @@ -32,12 +33,14 @@ func TestOCToMetrics(t *testing.T) {
allTypesNoDataPoints := testdata.GenerateMetricsAllTypesNoDataPoints()
dh := allTypesNoDataPoints.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0).Metrics().At(4)
ih := allTypesNoDataPoints.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0).Metrics().At(5)
ih.SetDoubleHistogram(dh.DoubleHistogram())
ih.SetDataType(pdata.MetricDataTypeDoubleHistogram)
dh.DoubleHistogram().CopyTo(ih.DoubleHistogram())

sampleMetricData := testdata.GenerateMetricsWithCountersHistograms()
dh = sampleMetricData.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0).Metrics().At(2)
ih = sampleMetricData.ResourceMetrics().At(0).InstrumentationLibraryMetrics().At(0).Metrics().At(3)
ih.SetDoubleHistogram(dh.DoubleHistogram())
ih.SetDataType(pdata.MetricDataTypeDoubleHistogram)
dh.DoubleHistogram().CopyTo(ih.DoubleHistogram())

tests := []struct {
name string
Expand Down