mirror of https://github.com/prometheus/prometheus
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
2.9 KiB
133 lines
2.9 KiB
12 years ago
|
package rules
|
||
|
|
||
|
import (
|
||
|
"github.com/matttproud/prometheus/model"
|
||
|
"github.com/matttproud/prometheus/rules/ast"
|
||
|
"github.com/matttproud/prometheus/storage/metric"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
var testDuration5m = time.Duration(5) * time.Minute
|
||
|
var testStartTime = time.Time{}
|
||
|
|
||
|
func getTestValueStream(startVal model.SampleValue,
|
||
|
endVal model.SampleValue,
|
||
|
stepVal model.SampleValue) (resultValues []model.SamplePair) {
|
||
|
currentTime := testStartTime
|
||
|
for currentVal := startVal; currentVal <= endVal; currentVal += stepVal {
|
||
|
sample := model.SamplePair{
|
||
|
Value: currentVal,
|
||
|
Timestamp: currentTime,
|
||
|
}
|
||
|
resultValues = append(resultValues, sample)
|
||
|
currentTime = currentTime.Add(testDuration5m)
|
||
|
}
|
||
|
return resultValues
|
||
|
}
|
||
|
|
||
|
func getTestVectorFromTestMatrix(matrix ast.Matrix) ast.Vector {
|
||
|
vector := ast.Vector{}
|
||
|
for _, sampleSet := range matrix {
|
||
|
lastSample := sampleSet.Values[len(sampleSet.Values)-1]
|
||
|
vector = append(vector, &model.Sample{
|
||
|
Metric: sampleSet.Metric,
|
||
|
Value: lastSample.Value,
|
||
|
Timestamp: lastSample.Timestamp,
|
||
|
})
|
||
|
}
|
||
|
return vector
|
||
|
}
|
||
|
|
||
|
func storeMatrix(persistence metric.MetricPersistence, matrix ast.Matrix) error {
|
||
|
for _, sampleSet := range matrix {
|
||
|
for _, sample := range sampleSet.Values {
|
||
|
err := persistence.AppendSample(&model.Sample{
|
||
|
Metric: sampleSet.Metric,
|
||
|
Value: sample.Value,
|
||
|
Timestamp: sample.Timestamp,
|
||
|
})
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
var testMatrix = ast.Matrix{
|
||
|
{
|
||
|
Metric: model.Metric{
|
||
|
"name": "http_requests",
|
||
|
"job": "api-server",
|
||
|
"instance": "0",
|
||
|
"group": "production",
|
||
|
},
|
||
|
Values: getTestValueStream(0, 100, 10),
|
||
|
},
|
||
|
{
|
||
|
Metric: model.Metric{
|
||
|
"name": "http_requests",
|
||
|
"job": "api-server",
|
||
|
"instance": "1",
|
||
|
"group": "production",
|
||
|
},
|
||
|
Values: getTestValueStream(0, 200, 20),
|
||
|
},
|
||
|
{
|
||
|
Metric: model.Metric{
|
||
|
"name": "http_requests",
|
||
|
"job": "api-server",
|
||
|
"instance": "0",
|
||
|
"group": "canary",
|
||
|
},
|
||
|
Values: getTestValueStream(0, 300, 30),
|
||
|
},
|
||
|
{
|
||
|
Metric: model.Metric{
|
||
|
"name": "http_requests",
|
||
|
"job": "api-server",
|
||
|
"instance": "1",
|
||
|
"group": "canary",
|
||
|
},
|
||
|
Values: getTestValueStream(0, 400, 40),
|
||
|
},
|
||
|
{
|
||
|
Metric: model.Metric{
|
||
|
"name": "http_requests",
|
||
|
"job": "app-server",
|
||
|
"instance": "0",
|
||
|
"group": "production",
|
||
|
},
|
||
|
Values: getTestValueStream(0, 500, 50),
|
||
|
},
|
||
|
{
|
||
|
Metric: model.Metric{
|
||
|
"name": "http_requests",
|
||
|
"job": "app-server",
|
||
|
"instance": "1",
|
||
|
"group": "production",
|
||
|
},
|
||
|
Values: getTestValueStream(0, 600, 60),
|
||
|
},
|
||
|
{
|
||
|
Metric: model.Metric{
|
||
|
"name": "http_requests",
|
||
|
"job": "app-server",
|
||
|
"instance": "0",
|
||
|
"group": "canary",
|
||
|
},
|
||
|
Values: getTestValueStream(0, 700, 70),
|
||
|
},
|
||
|
{
|
||
|
Metric: model.Metric{
|
||
|
"name": "http_requests",
|
||
|
"job": "app-server",
|
||
|
"instance": "1",
|
||
|
"group": "canary",
|
||
|
},
|
||
|
Values: getTestValueStream(0, 800, 80),
|
||
|
},
|
||
|
}
|
||
|
|
||
|
var testVector = getTestVectorFromTestMatrix(testMatrix)
|