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 @@
-
-