Merge pull request #1073 from prometheus/whats-our-vector-victor

promql: Add vector function.
pull/1077/head
Fabian Reinartz 9 years ago
commit a1617d90f4

@ -650,6 +650,30 @@ func funcLabelReplace(ev *evaluator, args Expressions) model.Value {
return vector
}
// === vector(s scalar, vector model.ValVectora={}) Vector ===
func funcVector(ev *evaluator, args Expressions) model.Value {
m := model.Metric{}
if len(args) >= 2 {
if vs, ok := args[1].(*VectorSelector); ok {
for _, matcher := range vs.LabelMatchers {
if matcher.Type == metric.Equal && matcher.Name != model.MetricNameLabel {
m[matcher.Name] = matcher.Value
}
}
}
}
return vector{
&sample{
Metric: metric.Metric{
Metric: m,
Copied: true,
},
Value: model.SampleValue(ev.evalFloat(args[0])),
Timestamp: ev.Timestamp,
},
}
}
var functions = map[string]*Function{
"abs": {
Name: "abs",
@ -845,6 +869,13 @@ var functions = map[string]*Function{
ReturnType: model.ValVector,
Call: funcTopk,
},
"vector": {
Name: "vector",
ArgTypes: []model.ValueType{model.ValScalar, model.ValVector},
ReturnType: model.ValVector,
OptionalArgs: 1,
Call: funcVector,
},
}
// getFunction returns a predefined Function object for the given name.

@ -146,3 +146,18 @@ eval_fail instant at 0m label_replace(testmetric, "invalid-label-name", "", "src
# label_replace fails when there would be duplicated identical output label sets.
eval_fail instant at 0m label_replace(testmetric, "src", "", "", "")
clear
# Tests for vector.
eval instant at 0m vector(1)
{} 1
eval instant at 60m vector(time())
{} 3600
eval instant at 0m vector(1, {a="b"})
{a="b"} 1
eval instant at 0m vector(1, {a="b", c=~"d", e!="f", g!~"h", a="z"})
{a="z"} 1

Loading…
Cancel
Save