-
Notifications
You must be signed in to change notification settings - Fork 2.5k
/
Copy pathmetric_translator.go
88 lines (75 loc) · 2.87 KB
/
metric_translator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Copyright 2020, OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package protocol
import (
"time"
"github.com/montanaflynn/stats"
"go.opentelemetry.io/collector/model/pdata"
)
func buildCounterMetric(parsedMetric statsDMetric, timeNow time.Time) pdata.InstrumentationLibraryMetrics {
ilm := pdata.NewInstrumentationLibraryMetrics()
nm := ilm.Metrics().AppendEmpty()
nm.SetName(parsedMetric.description.name)
if parsedMetric.unit != "" {
nm.SetUnit(parsedMetric.unit)
}
nm.SetDataType(pdata.MetricDataTypeIntSum)
nm.IntSum().SetAggregationTemporality(pdata.AggregationTemporalityDelta)
nm.IntSum().SetIsMonotonic(true)
dp := nm.IntSum().DataPoints().AppendEmpty()
dp.SetValue(parsedMetric.intvalue)
dp.SetTimestamp(pdata.TimestampFromTime(timeNow))
for i, key := range parsedMetric.labelKeys {
dp.LabelsMap().Insert(key, parsedMetric.labelValues[i])
}
return ilm
}
func buildGaugeMetric(parsedMetric statsDMetric, timeNow time.Time) pdata.InstrumentationLibraryMetrics {
ilm := pdata.NewInstrumentationLibraryMetrics()
nm := ilm.Metrics().AppendEmpty()
nm.SetName(parsedMetric.description.name)
if parsedMetric.unit != "" {
nm.SetUnit(parsedMetric.unit)
}
nm.SetDataType(pdata.MetricDataTypeDoubleGauge)
dp := nm.DoubleGauge().DataPoints().AppendEmpty()
dp.SetValue(parsedMetric.floatvalue)
dp.SetTimestamp(pdata.TimestampFromTime(timeNow))
for i, key := range parsedMetric.labelKeys {
dp.LabelsMap().Insert(key, parsedMetric.labelValues[i])
}
return ilm
}
func buildSummaryMetric(summaryMetric summaryMetric) pdata.InstrumentationLibraryMetrics {
ilm := pdata.NewInstrumentationLibraryMetrics()
nm := ilm.Metrics().AppendEmpty()
nm.SetName(summaryMetric.name)
nm.SetDataType(pdata.MetricDataTypeSummary)
dp := nm.Summary().DataPoints().AppendEmpty()
dp.SetCount(uint64(len(summaryMetric.summaryPoints)))
sum, _ := stats.Sum(summaryMetric.summaryPoints)
dp.SetSum(sum)
dp.SetTimestamp(pdata.TimestampFromTime(summaryMetric.timeNow))
for i, key := range summaryMetric.labelKeys {
dp.LabelsMap().Insert(key, summaryMetric.labelValues[i])
}
quantile := []float64{0, 10, 50, 90, 95, 100}
for _, v := range quantile {
eachQuantile := dp.QuantileValues().AppendEmpty()
eachQuantile.SetQuantile(v)
eachQuantileValue, _ := stats.PercentileNearestRank(summaryMetric.summaryPoints, v)
eachQuantile.SetValue(eachQuantileValue)
}
return ilm
}