From ba459a08e26e2809ca504f641811b68750a611cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Sun, 17 May 2020 23:20:10 +0100 Subject: [PATCH] fix(ui): add regex filters to default silence matchers Fixes #1750 --- ui/src/Components/SilenceModal/SilenceForm.js | 18 ++++++++-- .../SilenceModal/SilenceForm.test.js | 36 +++++++++++++++++-- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/ui/src/Components/SilenceModal/SilenceForm.js b/ui/src/Components/SilenceModal/SilenceForm.js index ff563144a..c05e9258e 100644 --- a/ui/src/Components/SilenceModal/SilenceForm.js +++ b/ui/src/Components/SilenceModal/SilenceForm.js @@ -48,16 +48,28 @@ const SilenceForm = ({ silenceFormStore.data.verifyStarEnd(); } - if (silenceFormStore.data.matchers.length === 0) { + if ( + silenceFormStore.data.matchers.filter( + (m) => m.name !== "" || m.values.length + ).length === 0 + ) { if (alertStore.filters.values.length > 0) { alertStore.filters.values .filter( - (f) => f.name[0] !== "@" && f.matcher === QueryOperators.Equal + (f) => + f.name[0] !== "@" && + (f.matcher === QueryOperators.Equal || + f.matcher === QueryOperators.Regex) ) .forEach((f) => { const matcher = NewEmptyMatcher(); matcher.name = f.name; - matcher.values = [MatcherValueToObject(f.value)]; + if (f.matcher === QueryOperators.Regex) { + matcher.values = [MatcherValueToObject(`.*${f.value}.*`)]; + matcher.isRegex = f.matcher === QueryOperators.Regex; + } else { + matcher.values = [MatcherValueToObject(f.value)]; + } silenceFormStore.data.matchers.push(matcher); }); } diff --git a/ui/src/Components/SilenceModal/SilenceForm.test.js b/ui/src/Components/SilenceModal/SilenceForm.test.js index 112478a7a..f9f89297c 100644 --- a/ui/src/Components/SilenceModal/SilenceForm.test.js +++ b/ui/src/Components/SilenceModal/SilenceForm.test.js @@ -87,8 +87,8 @@ describe(" matchers", () => { ]; const tree = MountedSilenceForm(); const matchers = tree.find("SilenceMatch"); - expect(matchers).toHaveLength(3); - expect(silenceFormStore.data.matchers).toHaveLength(3); + expect(matchers).toHaveLength(6); + expect(silenceFormStore.data.matchers).toHaveLength(6); expect(silenceFormStore.data.matchers[0]).toMatchObject({ isRegex: false, name: "alertname", @@ -100,6 +100,16 @@ describe(" matchers", () => { ], }); expect(silenceFormStore.data.matchers[1]).toMatchObject({ + isRegex: true, + name: "alertname", + values: [ + { + label: ".*alertnameRegex.*", + value: ".*alertnameRegex.*", + }, + ], + }); + expect(silenceFormStore.data.matchers[2]).toMatchObject({ isRegex: false, name: "cluster", values: [ @@ -109,7 +119,17 @@ describe(" matchers", () => { }, ], }); - expect(silenceFormStore.data.matchers[2]).toMatchObject({ + expect(silenceFormStore.data.matchers[3]).toMatchObject({ + isRegex: true, + name: "cluster", + values: [ + { + label: ".*clusterRegex.*", + value: ".*clusterRegex.*", + }, + ], + }); + expect(silenceFormStore.data.matchers[4]).toMatchObject({ isRegex: false, name: "foo", values: [ @@ -119,6 +139,16 @@ describe(" matchers", () => { }, ], }); + expect(silenceFormStore.data.matchers[5]).toMatchObject({ + isRegex: true, + name: "foo", + values: [ + { + label: ".*fooRegex.*", + value: ".*fooRegex.*", + }, + ], + }); }); it("clicking 'Add more' button adds another matcher", () => {