Skip to content

Commit 6b07384

Browse files
authored
Instead of supply metric metadata and label for aws calculator, supply with aws metric key which consists of metric metadata and label (#17207)
* Change to use metric key instead of metric and labels * Using GoImport to fix linter * Using GoImport to fix linter * Using GoImport to fix linter * Change description and change name * Change description and change name
1 parent 4b18609 commit 6b07384

File tree

7 files changed

+50
-62
lines changed

7 files changed

+50
-62
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
2+
change_type: enhancement
3+
4+
# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
5+
component: awsemfexporter
6+
7+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
8+
note: Instead of supply metric metadata and label for aws calculator, supply with aws metric key which consists of metric metadata and label
9+
10+
# One or more tracking issues related to the change
11+
issues: [17207]

exporter/awsemfexporter/datapoint.go

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -65,24 +65,11 @@ type dataPoints interface {
6565
type deltaMetricMetadata struct {
6666
adjustToDelta bool
6767
metricName string
68-
timestampMs int64
6968
namespace string
7069
logGroup string
7170
logStream string
7271
}
7372

74-
func mergeLabels(m deltaMetricMetadata, labels map[string]string) map[string]string {
75-
result := map[string]string{
76-
"namespace": m.namespace,
77-
"logGroup": m.logGroup,
78-
"logStream": m.logStream,
79-
}
80-
for k, v := range labels {
81-
result[k] = v
82-
}
83-
return result
84-
}
85-
8673
// numberDataPointSlice is a wrapper for pmetric.NumberDataPointSlice
8774
type numberDataPointSlice struct {
8875
instrumentationLibraryName string
@@ -125,8 +112,8 @@ func (dps numberDataPointSlice) At(i int) (dataPoint, bool) {
125112
retained := true
126113
if dps.adjustToDelta {
127114
var deltaVal interface{}
128-
deltaVal, retained = deltaMetricCalculator.Calculate(dps.metricName, mergeLabels(dps.deltaMetricMetadata, labels),
129-
metricVal, metric.Timestamp().AsTime())
115+
mKey := aws.NewKey(dps.deltaMetricMetadata, labels)
116+
deltaVal, retained = deltaMetricCalculator.Calculate(mKey, metricVal, metric.Timestamp().AsTime())
130117
if !retained {
131118
return dataPoint{}, retained
132119
}
@@ -173,8 +160,9 @@ func (dps summaryDataPointSlice) At(i int) (dataPoint, bool) {
173160
retained := true
174161
if dps.adjustToDelta {
175162
var delta interface{}
176-
delta, retained = summaryMetricCalculator.Calculate(dps.metricName, mergeLabels(dps.deltaMetricMetadata, labels),
177-
summaryMetricEntry{metric.Sum(), metric.Count()}, metric.Timestamp().AsTime())
163+
mKey := aws.NewKey(dps.deltaMetricMetadata, labels)
164+
165+
delta, retained = summaryMetricCalculator.Calculate(mKey, summaryMetricEntry{sum, count}, metric.Timestamp().AsTime())
178166
if !retained {
179167
return dataPoint{}, retained
180168
}
@@ -221,7 +209,6 @@ func getDataPoints(pmd pmetric.Metric, metadata cWMetricMetadata, logger *zap.Lo
221209
adjusterMetadata := deltaMetricMetadata{
222210
false,
223211
pmd.Name(),
224-
metadata.timestampMs,
225212
metadata.namespace,
226213
metadata.logGroup,
227214
metadata.logStream,

exporter/awsemfexporter/datapoint_test.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,6 @@ func TestIntDataPointSliceAt(t *testing.T) {
317317
deltaMetricMetadata{
318318
tc.adjustToDelta,
319319
"foo",
320-
0,
321320
"namespace",
322321
"log-group",
323322
"log-stream",
@@ -387,7 +386,6 @@ func TestDoubleDataPointSliceAt(t *testing.T) {
387386
deltaMetricMetadata{
388387
tc.adjustToDelta,
389388
"foo",
390-
0,
391389
"namespace",
392390
"log-group",
393391
"log-stream",
@@ -507,7 +505,6 @@ func TestSummaryDataPointSliceAt(t *testing.T) {
507505
setupDataPointCache()
508506

509507
instrLibName := "cloudwatch-otel"
510-
metadataTimeStamp := time.Now().UnixNano() / int64(time.Millisecond)
511508

512509
testCases := []struct {
513510
testName string
@@ -552,7 +549,6 @@ func TestSummaryDataPointSliceAt(t *testing.T) {
552549
deltaMetricMetadata{
553550
true,
554551
"foo",
555-
metadataTimeStamp,
556552
"namespace",
557553
"log-group",
558554
"log-stream",
@@ -625,15 +621,13 @@ func TestGetDataPoints(t *testing.T) {
625621
dmm := deltaMetricMetadata{
626622
false,
627623
"foo",
628-
metadata.timestampMs,
629624
"namespace",
630625
"log-group",
631626
"log-stream",
632627
}
633628
cumulativeDmm := deltaMetricMetadata{
634629
true,
635630
"foo",
636-
metadata.timestampMs,
637631
"namespace",
638632
"log-group",
639633
"log-stream",

exporter/awsemfexporter/grouped_metric.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func addToGroupedMetric(pmd pmetric.Metric, groupedMetrics map[interface{}]*grou
8080
}
8181

8282
// Extra params to use when grouping metrics
83-
groupKey := groupedMetricKey(metadata.groupedMetricMetadata, labels)
83+
groupKey := aws.NewKey(metadata, labels)
8484
if _, ok := groupedMetrics[groupKey]; ok {
8585
// if MetricName already exists in metrics map, print warning log
8686
if _, ok := groupedMetrics[groupKey].metrics[metricName]; ok {
@@ -178,10 +178,6 @@ func mapGetHelper(labels map[string]string, key string) string {
178178
return ""
179179
}
180180

181-
func groupedMetricKey(metadata groupedMetricMetadata, labels map[string]string) aws.Key {
182-
return aws.NewKey(metadata, labels)
183-
}
184-
185181
func translateUnit(metric pmetric.Metric, descriptor map[string]MetricDescriptor) string {
186182
unit := metric.Unit()
187183
if descriptor, exists := descriptor[metric.Name()]; exists {

internal/aws/metrics/metric_calculator.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ func NewMetricCalculator(calculateFunc CalculateFunc) MetricCalculator {
6161
}
6262
}
6363

64-
// Calculate accepts a new metric value identified by matricName and labels, and delegates
65-
// the calculation with value and timestamp back to CalculateFunc for the result. Returns
64+
// Calculate accepts a new metric value identified by metric key (consists of metric metadata and labels),
65+
// https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/eacfde3fcbd46ba60a6db0e9a41977390c4883bd/internal/aws/metrics/metric_calculator.go#L88-L91
66+
// and delegates the calculation with value and timestamp back to CalculateFunc for the result. Returns
6667
// true if the calculation is executed successfully.
67-
func (rm *MetricCalculator) Calculate(metricName string, labels map[string]string, value interface{}, timestamp time.Time) (interface{}, bool) {
68-
k := NewKey(metricName, labels)
68+
func (rm *MetricCalculator) Calculate(mKey Key, value interface{}, timestamp time.Time) (interface{}, bool) {
6969
cacheStore := rm.cache
7070

7171
var result interface{}
@@ -74,10 +74,10 @@ func (rm *MetricCalculator) Calculate(metricName string, labels map[string]strin
7474
rm.lock.Lock()
7575
defer rm.lock.Unlock()
7676

77-
prev, exists := cacheStore.Get(k)
77+
prev, exists := cacheStore.Get(mKey)
7878
result, done = rm.calculateFunc(prev, value, timestamp)
7979
if !exists || done {
80-
cacheStore.Set(k, MetricValue{
80+
cacheStore.Set(mKey, MetricValue{
8181
RawValue: value,
8282
Timestamp: timestamp,
8383
})

internal/aws/metrics/metric_calculator_test.go

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,37 +24,37 @@ import (
2424
)
2525

2626
func TestFloat64RateCalculator(t *testing.T) {
27-
MetricMetadata := "rate"
27+
mKey := NewKey("rate", nil)
2828
initTime := time.Now()
2929
c := newFloat64RateCalculator()
30-
r, ok := c.Calculate(MetricMetadata, nil, float64(50), initTime)
30+
r, ok := c.Calculate(mKey, float64(50), initTime)
3131
assert.False(t, ok)
3232
assert.Equal(t, float64(0), r)
3333

3434
nextTime := initTime.Add(100 * time.Millisecond)
35-
r, ok = c.Calculate(MetricMetadata, nil, float64(100), nextTime)
35+
r, ok = c.Calculate(mKey, float64(100), nextTime)
3636
assert.True(t, ok)
3737
assert.InDelta(t, 0.5, r, 0.1)
3838
}
3939

4040
func TestFloat64RateCalculatorWithTooFrequentUpdate(t *testing.T) {
41-
MetricMetadata := "rate"
41+
mKey := NewKey("rate", nil)
4242
initTime := time.Now()
4343
c := newFloat64RateCalculator()
44-
r, ok := c.Calculate(MetricMetadata, nil, float64(50), initTime)
44+
r, ok := c.Calculate(mKey, float64(50), initTime)
4545
assert.False(t, ok)
4646
assert.Equal(t, float64(0), r)
4747

4848
nextTime := initTime
4949
for i := 0; i < 10; i++ {
5050
nextTime = nextTime.Add(5 * time.Millisecond)
51-
r, ok = c.Calculate(MetricMetadata, nil, float64(105), nextTime)
51+
r, ok = c.Calculate(mKey, float64(105), nextTime)
5252
assert.False(t, ok)
5353
assert.Equal(t, float64(0), r)
5454
}
5555

5656
nextTime = nextTime.Add(5 * time.Millisecond)
57-
r, ok = c.Calculate(MetricMetadata, nil, float64(105), nextTime)
57+
r, ok = c.Calculate(mKey, float64(105), nextTime)
5858
assert.True(t, ok)
5959
assert.InDelta(t, 1, r, 0.1)
6060
}
@@ -73,13 +73,13 @@ func newFloat64RateCalculator() MetricCalculator {
7373
}
7474

7575
func TestFloat64DeltaCalculator(t *testing.T) {
76-
MetricMetadata := "delta"
76+
mKey := NewKey("delta", nil)
7777
initTime := time.Now()
7878
c := NewFloat64DeltaCalculator()
7979

8080
testCases := []float64{0.1, 0.1, 0.5, 1.3, 1.9, 2.5, 5, 24.2, 103}
8181
for i, f := range testCases {
82-
r, ok := c.Calculate(MetricMetadata, nil, f, initTime)
82+
r, ok := c.Calculate(mKey, f, initTime)
8383
assert.Equal(t, i > 0, ok)
8484
if i == 0 {
8585
assert.Equal(t, float64(0), r)
@@ -90,13 +90,13 @@ func TestFloat64DeltaCalculator(t *testing.T) {
9090
}
9191

9292
func TestFloat64DeltaCalculatorWithDecreasingValues(t *testing.T) {
93-
MetricMetadata := "delta"
93+
mKey := NewKey("delta", nil)
9494
initTime := time.Now()
9595
c := NewFloat64DeltaCalculator()
9696

9797
testCases := []float64{108, 106, 56.2, 28.8, 10, 10, 3, -1, -100}
9898
for i, f := range testCases {
99-
r, ok := c.Calculate(MetricMetadata, nil, f, initTime)
99+
r, ok := c.Calculate(mKey, f, initTime)
100100
assert.Equal(t, i > 0, ok)
101101
if ok {
102102
assert.Equal(t, testCases[i]-testCases[i-1], r)
@@ -186,19 +186,19 @@ func TestMapKeyEquals(t *testing.T) {
186186
labelMap2["k2"] = "v2"
187187
labelMap2["k1"] = "v1"
188188

189-
key1 := NewKey("name", labelMap1)
190-
key2 := NewKey("name", labelMap2)
191-
assert.Equal(t, key1, key2)
189+
mKey1 := NewKey("name", labelMap1)
190+
mKey2 := NewKey("name", labelMap2)
191+
assert.Equal(t, mKey1, mKey2)
192192

193-
key1 = NewKey(mockKey{
193+
mKey1 = NewKey(mockKey{
194194
name: "name",
195195
index: 1,
196196
}, labelMap1)
197-
key2 = NewKey(mockKey{
197+
mKey2 = NewKey(mockKey{
198198
name: "name",
199199
index: 1,
200200
}, labelMap2)
201-
assert.Equal(t, key1, key2)
201+
assert.Equal(t, mKey1, mKey2)
202202
}
203203

204204
func TestMapKeyNotEqualOnName(t *testing.T) {
@@ -210,23 +210,23 @@ func TestMapKeyNotEqualOnName(t *testing.T) {
210210
labelMap2["k2"] = "v2"
211211
labelMap2["k1"] = "v1"
212212

213-
key1 := NewKey("name1", labelMap1)
214-
key2 := NewKey("name2", labelMap2)
215-
assert.NotEqual(t, key1, key2)
213+
mKey1 := NewKey("name1", labelMap1)
214+
mKey2 := NewKey("name2", labelMap2)
215+
assert.NotEqual(t, mKey1, mKey2)
216216

217-
key1 = NewKey(mockKey{
217+
mKey1 = NewKey(mockKey{
218218
name: "name",
219219
index: 1,
220220
}, labelMap1)
221-
key2 = NewKey(mockKey{
221+
mKey2 = NewKey(mockKey{
222222
name: "name",
223223
index: 2,
224224
}, labelMap2)
225-
assert.NotEqual(t, key1, key2)
225+
assert.NotEqual(t, mKey1, mKey2)
226226

227-
key2 = NewKey(mockKey{
227+
mKey2 = NewKey(mockKey{
228228
name: "name0",
229229
index: 1,
230230
}, labelMap2)
231-
assert.NotEqual(t, key1, key2)
231+
assert.NotEqual(t, mKey1, mKey2)
232232
}

receiver/awscontainerinsightreceiver/internal/cadvisor/extractors/extractor.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ func newFloat64RateCalculator() awsmetrics.MetricCalculator {
139139

140140
func assignRateValueToField(rateCalculator *awsmetrics.MetricCalculator, fields map[string]interface{}, metricName string,
141141
cinfoName string, curVal interface{}, curTime time.Time, multiplier float64) {
142-
key := cinfoName + metricName
143-
if val, ok := rateCalculator.Calculate(key, nil, curVal, curTime); ok {
142+
mKey := awsmetrics.NewKey(cinfoName+metricName, nil)
143+
if val, ok := rateCalculator.Calculate(mKey, curVal, curTime); ok {
144144
fields[metricName] = val.(float64) * multiplier
145145
}
146146
}

0 commit comments

Comments
 (0)