From 54086663878c479eb3dc8968c0d3214119ee3300 Mon Sep 17 00:00:00 2001 From: beorn7 Date: Sat, 28 May 2016 19:45:35 +0200 Subject: [PATCH] Correctly stringify GROUP_x modifiers without labels Since rule evaluations work via String(), this fixes evaluation of rules containing GROUP_x modifiers without labels. This change is the minimal bugfix (so that we can release a fixed version without risk). It does not intend to implement any additional features (like allowing `GROUP_LEFT()` or `ON()` or even `ON` - see discussion in https://github.com/prometheus/prometheus/issues/1597 ). --- promql/printer.go | 15 ++++++++++----- promql/printer_test.go | 9 +++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/promql/printer.go b/promql/printer.go index 82ac53812..d8b8a58c7 100644 --- a/promql/printer.go +++ b/promql/printer.go @@ -165,11 +165,16 @@ func (node *BinaryExpr) String() string { } else { matching = fmt.Sprintf(" ON(%s)", vm.MatchingLabels) } - if vm.Card == CardManyToOne { - matching += fmt.Sprintf(" GROUP_LEFT(%s)", vm.Include) - } - if vm.Card == CardOneToMany { - matching += fmt.Sprintf(" GROUP_RIGHT(%s)", vm.Include) + if vm.Card == CardManyToOne || vm.Card == CardOneToMany { + matching += " GROUP_" + if vm.Card == CardManyToOne { + matching += "LEFT" + } else { + matching += "RIGHT" + } + if len(vm.Include) > 0 { + matching += fmt.Sprintf("(%s)", vm.Include) + } } } return fmt.Sprintf("%s %s%s%s %s", node.LHS, node.Op, returnBool, matching, node.RHS) diff --git a/promql/printer_test.go b/promql/printer_test.go index e17774ac8..c02e26ba6 100644 --- a/promql/printer_test.go +++ b/promql/printer_test.go @@ -39,6 +39,15 @@ func TestExprString(t *testing.T) { { in: `a - ON(b) c`, }, + { + in: `a - ON(b) GROUP_LEFT(x) c`, + }, + { + in: `a - ON(b) GROUP_LEFT(x, y) c`, + }, + { + in: `a - ON(b) GROUP_LEFT c`, + }, { in: `a - IGNORING(b) c`, },