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