Skip to content

Commit edfb5e9

Browse files
authored
test(testutil): Performance and code quality improvements on metric (#17011)
1 parent bfb9ff2 commit edfb5e9

File tree

1 file changed

+50
-47
lines changed

1 file changed

+50
-47
lines changed

testutil/metric.go

Lines changed: 50 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -30,32 +30,25 @@ func lessFunc(lhs, rhs *metricDiff) bool {
3030
return lhs.Measurement < rhs.Measurement
3131
}
3232

33-
for i := 0; ; i++ {
34-
if i >= len(lhs.Tags) && i >= len(rhs.Tags) {
35-
break
36-
} else if i >= len(lhs.Tags) {
37-
return true
38-
} else if i >= len(rhs.Tags) {
39-
return false
40-
}
33+
lhsLen, rhsLen := len(lhs.Tags), len(rhs.Tags)
34+
minLen := min(lhsLen, rhsLen)
4135

36+
for i := 0; i < minLen; i++ {
4237
if lhs.Tags[i].Key != rhs.Tags[i].Key {
4338
return lhs.Tags[i].Key < rhs.Tags[i].Key
4439
}
4540
if lhs.Tags[i].Value != rhs.Tags[i].Value {
4641
return lhs.Tags[i].Value < rhs.Tags[i].Value
4742
}
4843
}
44+
if lhsLen != rhsLen {
45+
return lhsLen < rhsLen
46+
}
4947

50-
for i := 0; ; i++ {
51-
if i >= len(lhs.Fields) && i >= len(rhs.Fields) {
52-
break
53-
} else if i >= len(lhs.Fields) {
54-
return true
55-
} else if i >= len(rhs.Fields) {
56-
return false
57-
}
48+
lhsLen, rhsLen = len(lhs.Fields), len(rhs.Fields)
49+
minLen = min(lhsLen, rhsLen)
5850

51+
for i := 0; i < minLen; i++ {
5952
if lhs.Fields[i].Key != rhs.Fields[i].Key {
6053
return lhs.Fields[i].Key < rhs.Fields[i].Key
6154
}
@@ -84,38 +77,43 @@ func lessFunc(lhs, rhs *metricDiff) bool {
8477
}
8578
}
8679
}
80+
if lhsLen != rhsLen {
81+
return lhsLen < rhsLen
82+
}
8783

8884
if lhs.Type != rhs.Type {
8985
return lhs.Type < rhs.Type
9086
}
9187

92-
if lhs.Time.UnixNano() != rhs.Time.UnixNano() {
93-
return lhs.Time.UnixNano() < rhs.Time.UnixNano()
94-
}
95-
96-
return false
88+
return lhs.Time.UnixNano() < rhs.Time.UnixNano()
9789
}
9890

9991
func newMetricDiff(telegrafMetric telegraf.Metric) *metricDiff {
10092
if telegrafMetric == nil {
10193
return nil
10294
}
10395

104-
m := &metricDiff{}
105-
m.Measurement = telegrafMetric.Name()
96+
tags := telegrafMetric.TagList()
97+
fields := telegrafMetric.FieldList()
98+
99+
m := &metricDiff{
100+
Measurement: telegrafMetric.Name(),
101+
Tags: make([]*telegraf.Tag, len(tags)),
102+
Fields: make([]*telegraf.Field, len(fields)),
103+
Type: telegrafMetric.Type(),
104+
Time: telegrafMetric.Time(),
105+
}
106+
107+
copy(m.Tags, tags)
108+
copy(m.Fields, fields)
106109

107-
m.Tags = append(m.Tags, telegrafMetric.TagList()...)
108110
sort.Slice(m.Tags, func(i, j int) bool {
109111
return m.Tags[i].Key < m.Tags[j].Key
110112
})
111-
112-
m.Fields = append(m.Fields, telegrafMetric.FieldList()...)
113113
sort.Slice(m.Fields, func(i, j int) bool {
114114
return m.Fields[i].Key < m.Fields[j].Key
115115
})
116116

117-
m.Type = telegrafMetric.Type()
118-
m.Time = telegrafMetric.Time()
119117
return m
120118
}
121119

@@ -124,27 +122,32 @@ func newMetricStructureDiff(telegrafMetric telegraf.Metric) *metricDiff {
124122
return nil
125123
}
126124

127-
m := &metricDiff{}
128-
m.Measurement = telegrafMetric.Name()
125+
tags := telegrafMetric.TagList()
126+
fields := telegrafMetric.FieldList()
129127

130-
m.Tags = append(m.Tags, telegrafMetric.TagList()...)
131-
sort.Slice(m.Tags, func(i, j int) bool {
132-
return m.Tags[i].Key < m.Tags[j].Key
133-
})
128+
m := &metricDiff{
129+
Measurement: telegrafMetric.Name(),
130+
Tags: make([]*telegraf.Tag, len(tags)),
131+
Fields: make([]*telegraf.Field, len(fields)),
132+
Type: telegrafMetric.Type(),
133+
Time: telegrafMetric.Time(),
134+
}
134135

135-
for _, f := range telegrafMetric.FieldList() {
136-
sf := &telegraf.Field{
136+
copy(m.Tags, tags)
137+
for i, f := range fields {
138+
m.Fields[i] = &telegraf.Field{
137139
Key: f.Key,
138140
Value: reflect.Zero(reflect.TypeOf(f.Value)).Interface(),
139141
}
140-
m.Fields = append(m.Fields, sf)
141142
}
143+
144+
sort.Slice(m.Tags, func(i, j int) bool {
145+
return m.Tags[i].Key < m.Tags[j].Key
146+
})
142147
sort.Slice(m.Fields, func(i, j int) bool {
143148
return m.Fields[i].Key < m.Fields[j].Key
144149
})
145150

146-
m.Type = telegrafMetric.Type()
147-
m.Time = telegrafMetric.Time()
148151
return m
149152
}
150153

@@ -369,23 +372,23 @@ func MustMetric(
369372
tm time.Time,
370373
tp ...telegraf.ValueType,
371374
) telegraf.Metric {
372-
m := metric.New(name, tags, fields, tm, tp...)
373-
return m
375+
return metric.New(name, tags, fields, tm, tp...)
374376
}
375377

376378
func FromTestMetric(met *Metric) telegraf.Metric {
377-
m := metric.New(met.Measurement, met.Tags, met.Fields, met.Time, met.Type)
378-
return m
379+
return metric.New(met.Measurement, met.Tags, met.Fields, met.Time, met.Type)
379380
}
380381

381382
func ToTestMetric(tm telegraf.Metric) *Metric {
382-
tags := make(map[string]string, len(tm.TagList()))
383-
for _, t := range tm.TagList() {
383+
tagList := tm.TagList()
384+
tags := make(map[string]string, len(tagList))
385+
for _, t := range tagList {
384386
tags[t.Key] = t.Value
385387
}
386388

387-
fields := make(map[string]interface{}, len(tm.FieldList()))
388-
for _, f := range tm.FieldList() {
389+
fieldList := tm.FieldList()
390+
fields := make(map[string]interface{}, len(fieldList))
391+
for _, f := range fieldList {
389392
fields[f.Key] = f.Value
390393
}
391394

0 commit comments

Comments
 (0)