Use the same timestamp per call if no time is provided (#7063)

This commit is contained in:
Anthony Arnaud 2020-02-25 15:19:28 -05:00 committed by GitHub
parent 9f8a73426d
commit 8c99dc7b5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 8 deletions

View File

@ -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 {