This commit is contained in:
Atsushi Tanaka 2018-04-19 05:09:00 +00:00 committed by GitHub
commit 9ac9a6ba7d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 3 deletions

View file

@ -146,6 +146,12 @@ func (r *basicSeriesRegistry) QueryForMetric(metricInfo provider.MetricInfo, nam
}
resourceLbl := r.namer.labelPrefix + singularResource
var expressions []string
if i := strings.Index(metricInfo.Metric, "{"); i > 1 && metricInfo.Metric[len(metricInfo.Metric)-1] == '}' {
expressions = append(expressions, metricInfo.Metric[i+1:len(metricInfo.Metric)-1])
metricInfo.Metric = metricInfo.Metric[:i]
}
// TODO: support container metrics
if info, found := r.info[metricInfo]; found {
targetValue := resourceNames[0]
@ -155,13 +161,12 @@ func (r *basicSeriesRegistry) QueryForMetric(metricInfo provider.MetricInfo, nam
matcher = prom.LabelMatches
}
var expressions []string
if info.isContainer {
expressions = []string{matcher("pod_name", targetValue), prom.LabelNeq("container_name", "POD")}
expressions = append(expressions, matcher("pod_name", targetValue), prom.LabelNeq("container_name", "POD"))
groupBy = "pod_name"
} else {
// TODO: copy base series labels?
expressions = []string{matcher(resourceLbl, targetValue)}
expressions = append(expressions, matcher(resourceLbl, targetValue))
groupBy = resourceLbl
}
@ -191,6 +196,10 @@ func (r *basicSeriesRegistry) MatchValuesToNames(metricInfo provider.MetricInfo,
}
resourceLbl := r.namer.labelPrefix + singularResource
if i := strings.Index(metricInfo.Metric, "{"); i > 1 {
metricInfo.Metric = metricInfo.Metric[:i]
}
if info, found := r.info[metricInfo]; found {
res := make(map[string]pmodel.SampleValue, len(values))
for _, val := range values {

View file

@ -116,6 +116,18 @@ func TestMetricNamerContainerSeries(t *testing.T) {
isContainer: true,
},
},
{
input: prom.Series{
Name: "container_some_time_seconds_total{status=\"success\"}",
Labels: pmodel.LabelSet{"status": "success", "pod_name": "somepod", "namespace": "somens", "container_name": "somecont"},
},
outputMetricName: "some_time",
outputInfo: seriesInfo{
baseSeries: prom.Series{Name: "container_some_time_seconds_total"},
kind: SecondsCounterSeries,
isContainer: true,
},
},
}
assert := assert.New(t)
@ -207,6 +219,10 @@ func TestSeriesRegistry(t *testing.T) {
Name: "admin_reddit_seconds_total",
Labels: pmodel.LabelSet{"kube_admin": "some-admin"},
},
{
Name: "service_proxy_packets{protocol=\"tcp\"}",
Labels: pmodel.LabelSet{"protocol": "tcp", "kube_service": "somesvc", "kube_namespace": "somens"},
},
}
// set up the registry
@ -335,6 +351,15 @@ func TestSeriesRegistry(t *testing.T) {
expectedKind: SecondsCounterSeries,
expectedQuery: "node_fan_seconds_total{kube_node=\"somenode\"}",
},
{
title: "namespaced metrics gauge",
info: provider.MetricInfo{schema.GroupResource{Resource: "service"}, true, "service_proxy_packets"},
namespace: "somens",
resourceNames: []string{"somesvc"},
expectedKind: GaugeSeries,
expectedQuery: "service_proxy_packets{kube_service=\"somesvc\",kube_namespace=\"somens\"}",
},
}
for _, testCase := range testCases {
@ -370,6 +395,8 @@ func TestSeriesRegistry(t *testing.T) {
{schema.GroupResource{Resource: "nodes"}, false, "node_gigawatts"},
{schema.GroupResource{Resource: "persistentvolumes"}, false, "volume_claims"},
{schema.GroupResource{Resource: "nodes"}, false, "node_fan"},
{schema.GroupResource{Resource: "services"}, true, "service_proxy_packets{protocol=\"tcp\"}"},
{schema.GroupResource{Resource: "namespaces"}, false, "service_proxy_packets{protocol=\"tcp\"}"},
}
// sort both for easy comparison