mirror of
https://github.com/kubernetes-sigs/prometheus-adapter.git
synced 2026-04-06 01:38:10 +00:00
Merge pull request #197 from s-urbaniak/external-namespace
pkg/naming/BuildExternal: respect namespace
This commit is contained in:
commit
9df21aa545
2 changed files with 50 additions and 10 deletions
|
|
@ -142,6 +142,19 @@ func (q *metricsQuery) BuildExternal(seriesName string, namespace string, groupB
|
||||||
// Build up the query parts from the selector.
|
// Build up the query parts from the selector.
|
||||||
queryParts = append(queryParts, q.createQueryPartsFromSelector(metricSelector)...)
|
queryParts = append(queryParts, q.createQueryPartsFromSelector(metricSelector)...)
|
||||||
|
|
||||||
|
if namespace != "" {
|
||||||
|
namespaceLbl, err := q.resConverter.LabelForResource(NsGroupResource)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
queryParts = append(queryParts, queryPart{
|
||||||
|
labelName: string(namespaceLbl),
|
||||||
|
values: []string{namespace},
|
||||||
|
operator: selection.Equals,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Convert our query parts into the types we need for our template.
|
// Convert our query parts into the types we need for our template.
|
||||||
exprs, valuesByName, err := q.processQueryParts(queryParts)
|
exprs, valuesByName, err := q.processQueryParts(queryParts)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ type resourceConverterMock struct {
|
||||||
// ResourcesForSeries is a mock that returns a single group resource,
|
// ResourcesForSeries is a mock that returns a single group resource,
|
||||||
// namely the series as a resource itself.
|
// namely the series as a resource itself.
|
||||||
func (rcm *resourceConverterMock) ResourcesForSeries(series prom.Series) (res []schema.GroupResource, namespaced bool) {
|
func (rcm *resourceConverterMock) ResourcesForSeries(series prom.Series) (res []schema.GroupResource, namespaced bool) {
|
||||||
return []schema.GroupResource{{Resource: series.Name}}, false
|
return []schema.GroupResource{{Resource: series.Name}}, rcm.namespaced
|
||||||
}
|
}
|
||||||
|
|
||||||
// LabelForResource is a mock that returns the label name,
|
// LabelForResource is a mock that returns the label name,
|
||||||
|
|
@ -236,8 +236,8 @@ func TestBuildSelector(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildExternalSelector(t *testing.T) {
|
func TestBuildExternalSelector(t *testing.T) {
|
||||||
mustNewQuery := func(queryTemplate string, namespaced bool) MetricsQuery {
|
mustNewQuery := func(queryTemplate string) MetricsQuery {
|
||||||
mq, err := NewMetricsQuery(queryTemplate, &resourceConverterMock{namespaced})
|
mq, err := NewMetricsQuery(queryTemplate, &resourceConverterMock{true})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
@ -267,7 +267,7 @@ func TestBuildExternalSelector(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "series",
|
name: "series",
|
||||||
|
|
||||||
mq: mustNewQuery(`series <<.Series>>`, false),
|
mq: mustNewQuery(`series <<.Series>>`),
|
||||||
series: "foo",
|
series: "foo",
|
||||||
metricSelector: labels.NewSelector(),
|
metricSelector: labels.NewSelector(),
|
||||||
|
|
||||||
|
|
@ -279,7 +279,7 @@ func TestBuildExternalSelector(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "single GroupBy value",
|
name: "single GroupBy value",
|
||||||
|
|
||||||
mq: mustNewQuery(`<<.GroupBy>>`, false),
|
mq: mustNewQuery(`<<.GroupBy>>`),
|
||||||
groupBy: "foo",
|
groupBy: "foo",
|
||||||
metricSelector: labels.NewSelector(),
|
metricSelector: labels.NewSelector(),
|
||||||
|
|
||||||
|
|
@ -291,7 +291,7 @@ func TestBuildExternalSelector(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "multiple GroupBySlice values",
|
name: "multiple GroupBySlice values",
|
||||||
|
|
||||||
mq: mustNewQuery(`<<.GroupBySlice>>`, false),
|
mq: mustNewQuery(`<<.GroupBySlice>>`),
|
||||||
groupBySlice: []string{"foo", "bar"},
|
groupBySlice: []string{"foo", "bar"},
|
||||||
metricSelector: labels.NewSelector(),
|
metricSelector: labels.NewSelector(),
|
||||||
|
|
||||||
|
|
@ -300,10 +300,23 @@ func TestBuildExternalSelector(t *testing.T) {
|
||||||
hasSelector("[foo bar]"),
|
hasSelector("[foo bar]"),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "multiple GroupBySlice values with namespace",
|
||||||
|
|
||||||
|
mq: mustNewQuery(`<<index .LabelValuesByName "namespaces">> <<.GroupBySlice>>`),
|
||||||
|
namespace: "default",
|
||||||
|
groupBySlice: []string{"foo", "bar"},
|
||||||
|
metricSelector: labels.NewSelector(),
|
||||||
|
|
||||||
|
check: checks(
|
||||||
|
hasError(nil),
|
||||||
|
hasSelector("default [foo bar]"),
|
||||||
|
),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "single LabelMatchers value",
|
name: "single LabelMatchers value",
|
||||||
|
|
||||||
mq: mustNewQuery(`<<.LabelMatchers>>`, false),
|
mq: mustNewQuery(`<<.LabelMatchers>>`),
|
||||||
metricSelector: labels.NewSelector().Add(
|
metricSelector: labels.NewSelector().Add(
|
||||||
*mustNewLabelRequirement("foo", selection.Equals, []string{"bar"}),
|
*mustNewLabelRequirement("foo", selection.Equals, []string{"bar"}),
|
||||||
),
|
),
|
||||||
|
|
@ -313,10 +326,24 @@ func TestBuildExternalSelector(t *testing.T) {
|
||||||
hasSelector(`foo="bar"`),
|
hasSelector(`foo="bar"`),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "single LabelMatchers value with namespace",
|
||||||
|
|
||||||
|
mq: mustNewQuery(`<<.LabelMatchers>>`),
|
||||||
|
namespace: "default",
|
||||||
|
metricSelector: labels.NewSelector().Add(
|
||||||
|
*mustNewLabelRequirement("foo", selection.Equals, []string{"bar"}),
|
||||||
|
),
|
||||||
|
|
||||||
|
check: checks(
|
||||||
|
hasError(nil),
|
||||||
|
hasSelector(`foo="bar",namespaces="default"`),
|
||||||
|
),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "multiple LabelMatchers value",
|
name: "multiple LabelMatchers value",
|
||||||
|
|
||||||
mq: mustNewQuery(`<<.LabelMatchers>>`, false),
|
mq: mustNewQuery(`<<.LabelMatchers>>`),
|
||||||
metricSelector: labels.NewSelector().Add(
|
metricSelector: labels.NewSelector().Add(
|
||||||
*mustNewLabelRequirement("foo", selection.Equals, []string{"bar"}),
|
*mustNewLabelRequirement("foo", selection.Equals, []string{"bar"}),
|
||||||
*mustNewLabelRequirement("qux", selection.In, []string{"bar", "baz"}),
|
*mustNewLabelRequirement("qux", selection.In, []string{"bar", "baz"}),
|
||||||
|
|
@ -330,7 +357,7 @@ func TestBuildExternalSelector(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "single LabelValuesByName value",
|
name: "single LabelValuesByName value",
|
||||||
|
|
||||||
mq: mustNewQuery(`<<.LabelValuesByName>>`, false),
|
mq: mustNewQuery(`<<.LabelValuesByName>>`),
|
||||||
metricSelector: labels.NewSelector().Add(
|
metricSelector: labels.NewSelector().Add(
|
||||||
*mustNewLabelRequirement("foo", selection.Equals, []string{"bar"}),
|
*mustNewLabelRequirement("foo", selection.Equals, []string{"bar"}),
|
||||||
),
|
),
|
||||||
|
|
@ -343,7 +370,7 @@ func TestBuildExternalSelector(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "single LabelValuesByName with multiple selectors",
|
name: "single LabelValuesByName with multiple selectors",
|
||||||
|
|
||||||
mq: mustNewQuery(`<<.LabelValuesByName>>`, false),
|
mq: mustNewQuery(`<<.LabelValuesByName>>`),
|
||||||
metricSelector: labels.NewSelector().Add(
|
metricSelector: labels.NewSelector().Add(
|
||||||
*mustNewLabelRequirement("foo", selection.In, []string{"bar", "baz"}),
|
*mustNewLabelRequirement("foo", selection.In, []string{"bar", "baz"}),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue