Use the same timestamp per call if no time is provided (#7063)
This commit is contained in:
parent
9f8a73426d
commit
8c99dc7b5e
|
@ -55,6 +55,8 @@ func ParseV2(buf []byte, header http.Header) ([]telegraf.Metric, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make sure all metrics have a consistent timestamp so that metrics don't straddle two different seconds
|
||||||
|
now := time.Now()
|
||||||
// read metrics
|
// read metrics
|
||||||
for metricName, mf := range metricFamilies {
|
for metricName, mf := range metricFamilies {
|
||||||
for _, m := range mf.Metric {
|
for _, m := range mf.Metric {
|
||||||
|
@ -63,11 +65,11 @@ func ParseV2(buf []byte, header http.Header) ([]telegraf.Metric, error) {
|
||||||
|
|
||||||
if mf.GetType() == dto.MetricType_SUMMARY {
|
if mf.GetType() == dto.MetricType_SUMMARY {
|
||||||
// summary metric
|
// summary metric
|
||||||
telegrafMetrics := makeQuantilesV2(m, tags, metricName, mf.GetType())
|
telegrafMetrics := makeQuantilesV2(m, tags, metricName, mf.GetType(), now)
|
||||||
metrics = append(metrics, telegrafMetrics...)
|
metrics = append(metrics, telegrafMetrics...)
|
||||||
} else if mf.GetType() == dto.MetricType_HISTOGRAM {
|
} else if mf.GetType() == dto.MetricType_HISTOGRAM {
|
||||||
// histogram metric
|
// histogram metric
|
||||||
telegrafMetrics := makeBucketsV2(m, tags, metricName, mf.GetType())
|
telegrafMetrics := makeBucketsV2(m, tags, metricName, mf.GetType(), now)
|
||||||
metrics = append(metrics, telegrafMetrics...)
|
metrics = append(metrics, telegrafMetrics...)
|
||||||
} else {
|
} else {
|
||||||
// standard metric
|
// standard metric
|
||||||
|
@ -80,7 +82,7 @@ func ParseV2(buf []byte, header http.Header) ([]telegraf.Metric, error) {
|
||||||
if m.TimestampMs != nil && *m.TimestampMs > 0 {
|
if m.TimestampMs != nil && *m.TimestampMs > 0 {
|
||||||
t = time.Unix(0, *m.TimestampMs*1000000)
|
t = time.Unix(0, *m.TimestampMs*1000000)
|
||||||
} else {
|
} else {
|
||||||
t = time.Now()
|
t = now
|
||||||
}
|
}
|
||||||
metric, err := metric.New("prometheus", tags, fields, t, valueType(mf.GetType()))
|
metric, err := metric.New("prometheus", tags, fields, t, valueType(mf.GetType()))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@ -95,14 +97,14 @@ func ParseV2(buf []byte, header http.Header) ([]telegraf.Metric, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get Quantiles for summary metric & Buckets for histogram
|
// Get Quantiles for summary metric & Buckets for histogram
|
||||||
func makeQuantilesV2(m *dto.Metric, tags map[string]string, metricName string, metricType dto.MetricType) []telegraf.Metric {
|
func makeQuantilesV2(m *dto.Metric, tags map[string]string, metricName string, metricType dto.MetricType, now time.Time) []telegraf.Metric {
|
||||||
var metrics []telegraf.Metric
|
var metrics []telegraf.Metric
|
||||||
fields := make(map[string]interface{})
|
fields := make(map[string]interface{})
|
||||||
var t time.Time
|
var t time.Time
|
||||||
if m.TimestampMs != nil && *m.TimestampMs > 0 {
|
if m.TimestampMs != nil && *m.TimestampMs > 0 {
|
||||||
t = time.Unix(0, *m.TimestampMs*1000000)
|
t = time.Unix(0, *m.TimestampMs*1000000)
|
||||||
} else {
|
} else {
|
||||||
t = time.Now()
|
t = now
|
||||||
}
|
}
|
||||||
fields[metricName+"_count"] = float64(m.GetSummary().GetSampleCount())
|
fields[metricName+"_count"] = float64(m.GetSummary().GetSampleCount())
|
||||||
fields[metricName+"_sum"] = float64(m.GetSummary().GetSampleSum())
|
fields[metricName+"_sum"] = float64(m.GetSummary().GetSampleSum())
|
||||||
|
@ -127,14 +129,14 @@ func makeQuantilesV2(m *dto.Metric, tags map[string]string, metricName string, m
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get Buckets from histogram metric
|
// Get Buckets from histogram metric
|
||||||
func makeBucketsV2(m *dto.Metric, tags map[string]string, metricName string, metricType dto.MetricType) []telegraf.Metric {
|
func makeBucketsV2(m *dto.Metric, tags map[string]string, metricName string, metricType dto.MetricType, now time.Time) []telegraf.Metric {
|
||||||
var metrics []telegraf.Metric
|
var metrics []telegraf.Metric
|
||||||
fields := make(map[string]interface{})
|
fields := make(map[string]interface{})
|
||||||
var t time.Time
|
var t time.Time
|
||||||
if m.TimestampMs != nil && *m.TimestampMs > 0 {
|
if m.TimestampMs != nil && *m.TimestampMs > 0 {
|
||||||
t = time.Unix(0, *m.TimestampMs*1000000)
|
t = time.Unix(0, *m.TimestampMs*1000000)
|
||||||
} else {
|
} else {
|
||||||
t = time.Now()
|
t = now
|
||||||
}
|
}
|
||||||
fields[metricName+"_count"] = float64(m.GetHistogram().GetSampleCount())
|
fields[metricName+"_count"] = float64(m.GetHistogram().GetSampleCount())
|
||||||
fields[metricName+"_sum"] = float64(m.GetHistogram().GetSampleSum())
|
fields[metricName+"_sum"] = float64(m.GetHistogram().GetSampleSum())
|
||||||
|
@ -193,6 +195,8 @@ func Parse(buf []byte, header http.Header) ([]telegraf.Metric, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make sure all metrics have a consistent timestamp so that metrics don't straddle two different seconds
|
||||||
|
now := time.Now()
|
||||||
// read metrics
|
// read metrics
|
||||||
for metricName, mf := range metricFamilies {
|
for metricName, mf := range metricFamilies {
|
||||||
for _, m := range mf.Metric {
|
for _, m := range mf.Metric {
|
||||||
|
@ -221,7 +225,7 @@ func Parse(buf []byte, header http.Header) ([]telegraf.Metric, error) {
|
||||||
if m.TimestampMs != nil && *m.TimestampMs > 0 {
|
if m.TimestampMs != nil && *m.TimestampMs > 0 {
|
||||||
t = time.Unix(0, *m.TimestampMs*1000000)
|
t = time.Unix(0, *m.TimestampMs*1000000)
|
||||||
} else {
|
} else {
|
||||||
t = time.Now()
|
t = now
|
||||||
}
|
}
|
||||||
metric, err := metric.New(metricName, tags, fields, t, valueType(mf.GetType()))
|
metric, err := metric.New(metricName, tags, fields, t, valueType(mf.GetType()))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
|
Loading…
Reference in New Issue