mirror of
https://github.com/kubernetes-sigs/prometheus-adapter.git
synced 2026-04-06 01:38:10 +00:00
* Wiped out a ton of warnings about comments. * Created consts for `MetricType` values. * `externalInfoMap` can now track multiple series with the same name/namespace and different labels. * `namespace` parameter of external metrics queries is now respected (albeit very rudimentarily) * Metric converter values for external metrics are now converted the same way as for custom metrics (probably still some opportunity for consolidation). * Lots of TODOs actually done. * Deleted a lot of commented out code.
48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
package provider
|
|
|
|
import (
|
|
"github.com/prometheus/common/model"
|
|
"k8s.io/apimachinery/pkg/api/resource"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/metrics/pkg/apis/external_metrics"
|
|
)
|
|
|
|
type sampleConverter struct {
|
|
}
|
|
|
|
//SampleConverter is capable of translating Prometheus Sample objects
|
|
//into ExternamMetricValue objects.
|
|
type SampleConverter interface {
|
|
Convert(sample *model.Sample) (*external_metrics.ExternalMetricValue, error)
|
|
}
|
|
|
|
//NewSampleConverter creates a SampleConverter capable of translating Prometheus Sample objects
|
|
//into ExternamMetricValue objects.
|
|
func NewSampleConverter() SampleConverter {
|
|
return &sampleConverter{}
|
|
}
|
|
|
|
func (c *sampleConverter) Convert(sample *model.Sample) (*external_metrics.ExternalMetricValue, error) {
|
|
labels := c.convertLabels(sample.Metric)
|
|
|
|
singleMetric := external_metrics.ExternalMetricValue{
|
|
MetricName: string(sample.Metric[model.LabelName("__name__")]),
|
|
Timestamp: metav1.Time{
|
|
sample.Timestamp.Time(),
|
|
},
|
|
Value: *resource.NewMilliQuantity(int64(sample.Value*1000.0), resource.DecimalSI),
|
|
MetricLabels: labels,
|
|
}
|
|
|
|
return &singleMetric, nil
|
|
}
|
|
|
|
func (c *sampleConverter) convertLabels(inLabels model.Metric) map[string]string {
|
|
numLabels := len(inLabels)
|
|
outLabels := make(map[string]string, numLabels)
|
|
for labelName, labelVal := range inLabels {
|
|
outLabels[string(labelName)] = string(labelVal)
|
|
}
|
|
|
|
return outLabels
|
|
}
|