Skip to content

Commit

Permalink
Merge pull request #197 from s-urbaniak/external-namespace
Browse files Browse the repository at this point in the history
pkg/naming/BuildExternal: respect namespace
  • Loading branch information
s-urbaniak committed May 17, 2019
2 parents 4b695d4 + e84becd commit 9df21aa
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 10 deletions.
13 changes: 13 additions & 0 deletions pkg/naming/metrics_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,19 @@ func (q *metricsQuery) BuildExternal(seriesName string, namespace string, groupB
// Build up the query parts from the selector.
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.
exprs, valuesByName, err := q.processQueryParts(queryParts)

Expand Down
47 changes: 37 additions & 10 deletions pkg/naming/metrics_query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ type resourceConverterMock struct {
// ResourcesForSeries is a mock that returns a single group resource,
// namely the series as a resource itself.
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,
Expand Down Expand Up @@ -236,8 +236,8 @@ func TestBuildSelector(t *testing.T) {
}

func TestBuildExternalSelector(t *testing.T) {
mustNewQuery := func(queryTemplate string, namespaced bool) MetricsQuery {
mq, err := NewMetricsQuery(queryTemplate, &resourceConverterMock{namespaced})
mustNewQuery := func(queryTemplate string) MetricsQuery {
mq, err := NewMetricsQuery(queryTemplate, &resourceConverterMock{true})
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -267,7 +267,7 @@ func TestBuildExternalSelector(t *testing.T) {
{
name: "series",

mq: mustNewQuery(`series <<.Series>>`, false),
mq: mustNewQuery(`series <<.Series>>`),
series: "foo",
metricSelector: labels.NewSelector(),

Expand All @@ -279,7 +279,7 @@ func TestBuildExternalSelector(t *testing.T) {
{
name: "single GroupBy value",

mq: mustNewQuery(`<<.GroupBy>>`, false),
mq: mustNewQuery(`<<.GroupBy>>`),
groupBy: "foo",
metricSelector: labels.NewSelector(),

Expand All @@ -291,7 +291,7 @@ func TestBuildExternalSelector(t *testing.T) {
{
name: "multiple GroupBySlice values",

mq: mustNewQuery(`<<.GroupBySlice>>`, false),
mq: mustNewQuery(`<<.GroupBySlice>>`),
groupBySlice: []string{"foo", "bar"},
metricSelector: labels.NewSelector(),

Expand All @@ -300,10 +300,23 @@ func TestBuildExternalSelector(t *testing.T) {
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",

mq: mustNewQuery(`<<.LabelMatchers>>`, false),
mq: mustNewQuery(`<<.LabelMatchers>>`),
metricSelector: labels.NewSelector().Add(
*mustNewLabelRequirement("foo", selection.Equals, []string{"bar"}),
),
Expand All @@ -313,10 +326,24 @@ func TestBuildExternalSelector(t *testing.T) {
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",

mq: mustNewQuery(`<<.LabelMatchers>>`, false),
mq: mustNewQuery(`<<.LabelMatchers>>`),
metricSelector: labels.NewSelector().Add(
*mustNewLabelRequirement("foo", selection.Equals, []string{"bar"}),
*mustNewLabelRequirement("qux", selection.In, []string{"bar", "baz"}),
Expand All @@ -330,7 +357,7 @@ func TestBuildExternalSelector(t *testing.T) {
{
name: "single LabelValuesByName value",

mq: mustNewQuery(`<<.LabelValuesByName>>`, false),
mq: mustNewQuery(`<<.LabelValuesByName>>`),
metricSelector: labels.NewSelector().Add(
*mustNewLabelRequirement("foo", selection.Equals, []string{"bar"}),
),
Expand All @@ -343,7 +370,7 @@ func TestBuildExternalSelector(t *testing.T) {
{
name: "single LabelValuesByName with multiple selectors",

mq: mustNewQuery(`<<.LabelValuesByName>>`, false),
mq: mustNewQuery(`<<.LabelValuesByName>>`),
metricSelector: labels.NewSelector().Add(
*mustNewLabelRequirement("foo", selection.In, []string{"bar", "baz"}),
),
Expand Down

0 comments on commit 9df21aa

Please sign in to comment.