mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-27 06:29:42 -08:00
Merge pull request #164 from prometheus/extensibility/futureproof/values
Refresh SampleValue to 64-bit floating point.
This commit is contained in:
commit
bb12929cf4
|
@ -50,8 +50,8 @@ message SampleKey {
|
|||
|
||||
message SampleValueSeries {
|
||||
message Value {
|
||||
optional int64 timestamp = 1;
|
||||
optional float value = 2;
|
||||
optional int64 timestamp = 1;
|
||||
optional double value = 2;
|
||||
}
|
||||
repeated Value value = 1;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ package model
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"code.google.com/p/goprotobuf/proto"
|
||||
"fmt"
|
||||
"sort"
|
||||
"time"
|
||||
|
@ -70,10 +71,12 @@ func (l LabelSet) String() string {
|
|||
type Metric map[LabelName]LabelValue
|
||||
|
||||
// A SampleValue is a representation of a value for a given sample at a given
|
||||
// time. It is presently float32 due to that being the representation that
|
||||
// Protocol Buffers provide of floats in Go. This is a smell and should be
|
||||
// remedied down the road.
|
||||
type SampleValue float32
|
||||
// time.
|
||||
type SampleValue float64
|
||||
|
||||
func (s SampleValue) ToDTO() *float64 {
|
||||
return proto.Float64(float64(s))
|
||||
}
|
||||
|
||||
func (v SampleValue) MarshalJSON() ([]byte, error) {
|
||||
return []byte(fmt.Sprintf("\"%f\"", v)), nil
|
||||
|
|
|
@ -59,14 +59,14 @@ func testProcessor001Process(t test.Tester) {
|
|||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.010000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "zed"},
|
||||
Value: 0.04598141,
|
||||
Value: 0.0459814091918713,
|
||||
},
|
||||
},
|
||||
{
|
||||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.010000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "bar"},
|
||||
Value: 78.485634,
|
||||
Value: 78.48563317257356,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -80,14 +80,14 @@ func testProcessor001Process(t test.Tester) {
|
|||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.050000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "zed"},
|
||||
Value: 0.04598141,
|
||||
Value: 0.0459814091918713,
|
||||
},
|
||||
},
|
||||
{
|
||||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.050000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "bar"},
|
||||
Value: 78.485634,
|
||||
Value: 78.48563317257356,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -101,63 +101,63 @@ func testProcessor001Process(t test.Tester) {
|
|||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.500000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "zed"},
|
||||
Value: 0.61204565,
|
||||
Value: 0.6120456642749681,
|
||||
},
|
||||
},
|
||||
{
|
||||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.500000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "bar"},
|
||||
Value: 97.317986,
|
||||
Value: 97.31798360385088,
|
||||
},
|
||||
},
|
||||
{
|
||||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.500000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "foo"},
|
||||
Value: 84.63044,
|
||||
Value: 84.63044031436561,
|
||||
},
|
||||
},
|
||||
{
|
||||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.900000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "zed"},
|
||||
Value: 1.3559151,
|
||||
Value: 1.355915069887731,
|
||||
},
|
||||
},
|
||||
{
|
||||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.900000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "bar"},
|
||||
Value: 109.89202,
|
||||
Value: 109.89202084295582,
|
||||
},
|
||||
},
|
||||
{
|
||||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.900000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "foo"},
|
||||
Value: 160.21101,
|
||||
Value: 160.21100853053224,
|
||||
},
|
||||
},
|
||||
{
|
||||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.990000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "zed"},
|
||||
Value: 1.7727332,
|
||||
Value: 1.772733213161236,
|
||||
},
|
||||
},
|
||||
{
|
||||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.990000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "bar"},
|
||||
Value: 109.99626,
|
||||
Value: 109.99626121011262,
|
||||
},
|
||||
},
|
||||
{
|
||||
Sample: model.Sample{
|
||||
|
||||
Metric: model.Metric{"percentile": "0.990000", model.MetricNameLabel: "rpc_latency_microseconds", "service": "foo"},
|
||||
Value: 172.49829,
|
||||
Value: 172.49828748957728,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -235,7 +235,7 @@ var expressionTests = []struct {
|
|||
}, {
|
||||
// Rates should transform per-interval deltas to per-second rates.
|
||||
expr: "rate(http_requests{group='canary',instance='1',job='app-server'}[10m])",
|
||||
output: []string{"http_requests{group='canary',instance='1',job='app-server'} => 0.26666668 @[%v]"},
|
||||
output: []string{"http_requests{group='canary',instance='1',job='app-server'} => 0.26666666666666666 @[%v]"},
|
||||
fullRanges: 1,
|
||||
intervalRanges: 0,
|
||||
}, {
|
||||
|
|
|
@ -40,7 +40,7 @@ type (
|
|||
|
||||
sample struct {
|
||||
time time.Time
|
||||
value float32
|
||||
value float64
|
||||
}
|
||||
|
||||
sampleGroup struct {
|
||||
|
@ -90,7 +90,7 @@ func (s sampleGroup) Get() (key, value coding.Encoder) {
|
|||
for _, value := range s.values {
|
||||
series.Value = append(series.Value, &dto.SampleValueSeries_Value{
|
||||
Timestamp: proto.Int64(value.time.Unix()),
|
||||
Value: proto.Float32(float32(value.value)),
|
||||
Value: proto.Float64(value.value),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -619,7 +619,7 @@ func (l *LevelDBMetricPersistence) AppendSamples(samples model.Samples) (err err
|
|||
for _, sample := range chunk {
|
||||
value.Value = append(value.Value, &dto.SampleValueSeries_Value{
|
||||
Timestamp: proto.Int64(sample.Timestamp.Unix()),
|
||||
Value: proto.Float32(float32(sample.Value)),
|
||||
Value: sample.Value.ToDTO(),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ func GetValueAtTimeTests(persistenceMaker func() (MetricPersistence, test.Closer
|
|||
month time.Month
|
||||
day int
|
||||
hour int
|
||||
value float32
|
||||
value float64
|
||||
}
|
||||
|
||||
type input struct {
|
||||
|
@ -358,7 +358,7 @@ func GetBoundaryValuesTests(persistenceMaker func() (MetricPersistence, test.Clo
|
|||
month time.Month
|
||||
day int
|
||||
hour int
|
||||
value float32
|
||||
value float64
|
||||
}
|
||||
|
||||
type input struct {
|
||||
|
@ -672,7 +672,7 @@ func GetRangeValuesTests(persistenceMaker func() (MetricPersistence, test.Closer
|
|||
month time.Month
|
||||
day int
|
||||
hour int
|
||||
value float32
|
||||
value float64
|
||||
}
|
||||
|
||||
type input struct {
|
||||
|
@ -691,7 +691,7 @@ func GetRangeValuesTests(persistenceMaker func() (MetricPersistence, test.Closer
|
|||
month time.Month
|
||||
day int
|
||||
hour int
|
||||
value float32
|
||||
value model.SampleValue
|
||||
}
|
||||
|
||||
type behavior struct {
|
||||
|
|
|
@ -233,10 +233,12 @@ func levelDBGetRangeValues(l *LevelDBMetricPersistence, fp model.Fingerprint, i
|
|||
return nil, err
|
||||
}
|
||||
|
||||
samples = append(samples, model.SamplePair{
|
||||
Value: model.SampleValue(*retrievedValue.Value[0].Value),
|
||||
Timestamp: indexable.DecodeTime(retrievedKey.Timestamp),
|
||||
})
|
||||
for _, value := range retrievedValue.Value {
|
||||
samples = append(samples, model.SamplePair{
|
||||
Value: model.SampleValue(*value.Value),
|
||||
Timestamp: time.Unix(*value.Timestamp, 0),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
|
|
Loading…
Reference in a new issue