mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-10 07:34:04 -08:00
efe61c18fa
``Target`` will be refactored down the road to support various nuanced endpoint types. Thusly incorporating the scheduling behavior within it will be problematic. To that end, the scheduling behavior has been moved into a separate assistance type to improve conciseness and testability. ``make format`` was also run.
116 lines
3 KiB
Go
116 lines
3 KiB
Go
package ast
|
|
|
|
//////////
|
|
// TEMPORARY CRAP FILE IN LIEU OF MISSING FUNCTIONALITY IN STORAGE LAYER
|
|
//
|
|
// REMOVE!
|
|
|
|
import (
|
|
"github.com/matttproud/prometheus/model"
|
|
"github.com/matttproud/prometheus/storage/metric"
|
|
"time"
|
|
)
|
|
|
|
// TODO ask matt about using pointers in nested metric structs
|
|
|
|
// TODO move this somewhere proper
|
|
var stalenessPolicy = metric.StalenessPolicy{
|
|
DeltaAllowance: time.Duration(300) * time.Second,
|
|
}
|
|
|
|
// TODO remove PersistenceBridge temporary helper.
|
|
type PersistenceBridge struct {
|
|
persistence metric.MetricPersistence
|
|
}
|
|
|
|
// AST-global persistence to use.
|
|
var persistence *PersistenceBridge = nil
|
|
|
|
func (p *PersistenceBridge) getMetricsWithLabels(labels model.LabelSet) ([]*model.Metric, error) {
|
|
fingerprints, err := p.persistence.GetFingerprintsForLabelSet(&labels)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
metrics := []*model.Metric{}
|
|
for _, fingerprint := range fingerprints {
|
|
metric, err := p.persistence.GetMetricForFingerprint(fingerprint)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
metrics = append(metrics, metric)
|
|
}
|
|
return metrics, nil
|
|
}
|
|
|
|
func (p *PersistenceBridge) GetValueAtTime(labels model.LabelSet, timestamp *time.Time, stalenessPolicy *metric.StalenessPolicy) ([]*model.Sample, error) {
|
|
metrics, err := p.getMetricsWithLabels(labels)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
samples := []*model.Sample{}
|
|
for _, metric := range metrics {
|
|
sample, err := p.persistence.GetValueAtTime(metric, timestamp, stalenessPolicy)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if sample == nil {
|
|
continue
|
|
}
|
|
samples = append(samples, sample)
|
|
}
|
|
return samples, nil
|
|
}
|
|
|
|
func (p *PersistenceBridge) GetBoundaryValues(labels model.LabelSet, interval *model.Interval, stalenessPolicy *metric.StalenessPolicy) ([]*model.SampleSet, error) {
|
|
metrics, err := p.getMetricsWithLabels(labels)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sampleSets := []*model.SampleSet{}
|
|
for _, metric := range metrics {
|
|
// TODO: change to GetBoundaryValues() once it has the right return type.
|
|
sampleSet, err := p.persistence.GetRangeValues(metric, interval, stalenessPolicy)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if sampleSet == nil {
|
|
continue
|
|
}
|
|
|
|
// TODO remove when persistence return value is fixed.
|
|
sampleSet.Metric = *metric
|
|
sampleSets = append(sampleSets, sampleSet)
|
|
}
|
|
return sampleSets, nil
|
|
}
|
|
|
|
func (p *PersistenceBridge) GetRangeValues(labels model.LabelSet, interval *model.Interval, stalenessPolicy *metric.StalenessPolicy) ([]*model.SampleSet, error) {
|
|
metrics, err := p.getMetricsWithLabels(labels)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sampleSets := []*model.SampleSet{}
|
|
for _, metric := range metrics {
|
|
sampleSet, err := p.persistence.GetRangeValues(metric, interval, stalenessPolicy)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if sampleSet == nil {
|
|
continue
|
|
}
|
|
|
|
// TODO remove when persistence return value is fixed.
|
|
sampleSet.Metric = *metric
|
|
sampleSets = append(sampleSets, sampleSet)
|
|
}
|
|
return sampleSets, nil
|
|
}
|
|
|
|
func SetPersistence(p metric.MetricPersistence) {
|
|
persistence = &PersistenceBridge{
|
|
persistence: p,
|
|
}
|
|
}
|