fix(ui): only allow read-write alertmanagers when editing silence

This commit is contained in:
Łukasz Mierzwa
2020-01-29 12:00:27 +00:00
parent d5e6d4ee78
commit 3239db2130
5 changed files with 61 additions and 5 deletions

View File

@@ -111,9 +111,8 @@ const DeleteSilenceModalContent = observer(
);
getAlertmanager = () =>
this.props.alertStore.data.upstreams.instances
this.props.alertStore.data.readWriteAlertmanagers
.filter(u => u.cluster === this.props.cluster)
.filter(u => u.readonly === false)
.slice(0, 1)[0];
parseAlertmanagerResponse = response => {

View File

@@ -29,7 +29,8 @@ beforeEach(() => {
readonly: false,
error: "",
version: "0.15.3",
headers: {}
headers: {},
clusterMembers: ["am1"]
}
],
clusters: { am: ["am1"] }

View File

@@ -45,9 +45,8 @@ const ManagedSilence = observer(
}
getAlertmanager = () =>
this.props.alertStore.data.upstreams.instances
this.props.alertStore.data.readWriteAlertmanagers
.filter(u => u.cluster === this.props.cluster)
.filter(u => u.readonly === false)
.slice(0, 1)[0];
onEditSilence = () => {

View File

@@ -103,6 +103,51 @@ describe("<ManagedSilence />", () => {
});
});
it("getAlertmanager() returns only writable instances", () => {
alertStore.data.upstreams = {
instances: [
{
name: "am1",
cluster: "am",
clusterMembers: ["am1", "am2"],
uri: "http://localhost:9093",
publicURI: "http://example.com",
readonly: false,
error: "",
version: "0.15.3",
headers: {}
},
{
name: "am2",
cluster: "am",
clusterMembers: ["am1", "am2"],
uri: "http://localhost:9094",
publicURI: "http://example.com",
readonly: true,
error: "",
version: "0.15.3",
headers: {}
}
],
clusters: { am: ["am1", "am2"] }
};
const tree = MountedManagedSilence();
const instance = tree.instance();
const am = instance.getAlertmanager();
expect(am).toEqual({
name: "am1",
cluster: "am",
clusterMembers: ["am1"],
uri: "http://localhost:9093",
publicURI: "http://example.com",
readonly: false,
error: "",
version: "0.15.3",
headers: {}
});
});
it("shows Edit button on unexpired silence", () => {
const tree = MountedManagedSilence();
tree.instance().collapse.toggle();

View File

@@ -176,6 +176,17 @@ class AlertStore {
get readOnlyAlertmanagers() {
return this.upstreams.instances.filter(am => am.readonly === true);
},
get readWriteAlertmanagers() {
return this.upstreams.instances
.filter(am => am.readonly === false)
.map(am =>
Object.assign({}, am, {
clusterMembers: am.clusterMembers.filter(
m => this.isReadOnlyAlertmanager(m) === false
)
})
);
},
get clustersWithoutReadOnly() {
const clusters = {};
for (const clusterID of Object.keys(this.upstreams.clusters)) {
@@ -196,6 +207,7 @@ class AlertStore {
},
{
readOnlyAlertmanagers: computed,
readWriteAlertmanagers: computed,
clustersWithoutReadOnly: computed
},
{ name: "API Response data" }