From bc799856f209ca932fe446c5a5c2aa11de2dc937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Sat, 8 Sep 2018 19:47:32 +0100 Subject: [PATCH] feat(ui): allow generating silence form content from a subset of group alerts --- ui/src/Stores/SilenceFormStore.js | 6 +++-- ui/src/Stores/SilenceFormStore.test.js | 34 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/ui/src/Stores/SilenceFormStore.js b/ui/src/Stores/SilenceFormStore.js index 600d0bce1..a78e198cd 100644 --- a/ui/src/Stores/SilenceFormStore.js +++ b/ui/src/Stores/SilenceFormStore.js @@ -87,7 +87,8 @@ class SilenceFormStore { } }, - fillMatchersFromGroup(group) { + // if alerts argument is not passed all group alerts will be used + fillMatchersFromGroup(group, alerts) { let matchers = []; // add matchers for all shared labels in this group @@ -102,7 +103,8 @@ class SilenceFormStore { // add matchers for all unique labels in this group let labels = {}; - for (const alert of group.alerts) { + const allAlerts = alerts ? alerts : group.alerts; + for (const alert of allAlerts) { for (const [key, value] of Object.entries(alert.labels)) { if (!labels[key]) { labels[key] = new Set(); diff --git a/ui/src/Stores/SilenceFormStore.test.js b/ui/src/Stores/SilenceFormStore.test.js index 6d8e13c32..f7566f069 100644 --- a/ui/src/Stores/SilenceFormStore.test.js +++ b/ui/src/Stores/SilenceFormStore.test.js @@ -123,6 +123,40 @@ describe("SilenceFormStore.data", () => { ); }); + it("fillMatchersFromGroup() creates correct matcher object for a group with only a subset of alets passed", () => { + const group = MockGroup(); + store.data.fillMatchersFromGroup(group, [group.alerts[0]]); + expect(store.data.matchers).toHaveLength(4); + expect(store.data.matchers).toContainEqual( + expect.objectContaining({ + name: "alertname", + values: [{ label: "FakeAlert", value: "FakeAlert" }], + isRegex: false + }) + ); + expect(store.data.matchers).toContainEqual( + expect.objectContaining({ + name: "job", + values: [{ label: "mock", value: "mock" }], + isRegex: false + }) + ); + expect(store.data.matchers).toContainEqual( + expect.objectContaining({ + name: "instance", + values: [{ label: "prod1", value: "prod1" }], + isRegex: false + }) + ); + expect(store.data.matchers).toContainEqual( + expect.objectContaining({ + name: "cluster", + values: [{ label: "prod", value: "prod" }], + isRegex: false + }) + ); + }); + it("toAlertmanagerPayload creates payload that matches snapshot", () => { const group = MockGroup(); store.data.fillMatchersFromGroup(group);