From afb419f4f390ba3cb3c63fcb06848ecd74e2c7ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Fri, 30 Jun 2017 19:50:54 -0700 Subject: [PATCH] Handle silence request result for multiple Alertmanager instances in the UI Silence result UI will now show all selected upstreams and provide individual results for each --- Makefile | 2 +- assets/static/silence.js | 24 +++++++++++++++++------ assets/static/templates.js | 1 + assets/templates/silence.html | 37 ++++++++++++++++++++++++++--------- bindata_assetfs.go | 6 +++--- 5 files changed, 51 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index ce0150b92..7e2b4e63d 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ VERSION := $(shell git describe --tags --always --dirty='-dev') # Alertmanager instance used when running locally, points to mock data MOCK_PATH := $(CURDIR)/mock/0.7.1 -ALERTMANAGER_URIS := mock:file://$(MOCK_PATH) +ALERTMANAGER_URIS := "docker:http://localhost:9093 am-0.7.1:file://$(CURDIR)/mock/0.7.1" # Listen port when running locally PORT := 8080 diff --git a/assets/static/silence.js b/assets/static/silence.js index 4be72ee98..3e68a1268 100644 --- a/assets/static/silence.js +++ b/assets/static/silence.js @@ -132,9 +132,10 @@ var Silence = (function() { }; var sendSilencePOST = function(url, payload) { + var elem = $(".silence-post-result[data-uri='" + url + "']"); $.ajax({ type: "POST", - url: url, + url: url + "/api/v1/silences", data: JSON.stringify(payload), error: function(xhr, textStatus, errorThrown) { // default to whatever error text we can get @@ -153,19 +154,18 @@ var Silence = (function() { } var errContent = Templates.Render("silenceFormError", {error: err}); - $("#newSilenceAlert").html(errContent).removeClass("hidden"); + $(elem).html(errContent); }, success: function(data) { // FIXME this is per instance now, so needs to be handled differently if (data.status == "success") { - $("#newSilenceAlert").addClass("hidden"); - $("#newSilenceForm").html(Templates.Render("silenceFormSuccess", { + $(elem).html(Templates.Render("silenceFormSuccess", { silenceID: data.data.silenceId })); } else { var err = "Invalid response from Alertmanager API: " + JSON.stringify(data); var errContent = Templates.Render("silenceFormError", {error: err}); - $("#newSilenceAlert").html(errContent).removeClass("hidden"); + $(elem).html(errContent); } }, dataType: "json" @@ -292,8 +292,20 @@ var Silence = (function() { $("#newSilenceAlert").html(errContent).removeClass("hidden"); return false; } + $("#newSilenceAlert").addClass("hidden"); - $.each(silenceFormAlertmanagerURL(), function(i, uri){ + var selectedAMURIs = silenceFormAlertmanagerURL(); + var selectedAMs = []; + $.each(alertmanagers, function(i, am) { + if ($.inArray(am.uri, selectedAMURIs) >= 0) { + selectedAMs.push(am); + } + }); + modal.find(".modal-body").html( + Templates.Render("silenceFormResults", {alertmanagers: selectedAMs}) + ); + + $.each(selectedAMURIs, function(i, uri){ sendSilencePOST(uri, payload); }); diff --git a/assets/static/templates.js b/assets/static/templates.js index ad3be73cf..b23f3d1ea 100644 --- a/assets/static/templates.js +++ b/assets/static/templates.js @@ -24,6 +24,7 @@ var Templates = (function() { // modal popup with silence form silenceForm: "#silence-form", + silenceFormResults: "#silence-form-results", silenceFormSuccess: "#silence-form-success", silenceFormError: "#silence-form-error", silenceFormFatal: "#silence-form-fatal", diff --git a/assets/templates/silence.html b/assets/templates/silence.html index 6ea5acada..2f3b491ca 100644 --- a/assets/templates/silence.html +++ b/assets/templates/silence.html @@ -221,12 +221,36 @@ + + + + @@ -242,11 +266,6 @@

- -