[alert-manager] Add ability to add params to a silence
Screenshot: https://screenshot.googleplex.com/Mj34pgYtOh7
Bug: skia:9587
Change-Id: Ia89cb51dd02cfbff98d2869b7a35c08ae3972dfe
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/251362
Commit-Queue: Ravi Mistry <rmistry@google.com>
Reviewed-by: Joe Gregorio <jcgregorio@google.com>
diff --git a/am/modules/alert-manager-sk/alert-manager-sk.js b/am/modules/alert-manager-sk/alert-manager-sk.js
index 7861f04..8afbaf7 100644
--- a/am/modules/alert-manager-sk/alert-manager-sk.js
+++ b/am/modules/alert-manager-sk/alert-manager-sk.js
@@ -249,6 +249,7 @@
this.addEventListener('delete-silence', e => this._deleteSilence(e.detail.silence));
this.addEventListener('add-silence-note', e => this._addSilenceNote(e));
this.addEventListener('del-silence-note', e => this._delSilenceNote(e));
+ this.addEventListener('add-silence-param', e => this._addSilenceParam(e.detail.silence));
this.addEventListener('delete-silence-param', e => this._deleteSilenceParam(e.detail.silence));
this.addEventListener('modify-silence-param', e => this._modifySilenceParam(e.detail.silence));
this.addEventListener('add-note', e => this._addNote(e));
@@ -429,6 +430,17 @@
this._doImpl('/_/del_note', e.detail);
}
+ _addSilenceParam(silence) {
+ // Don't save silences that are just being created when you add a param.
+ if (!silence.key) {
+ this._current_silence = silence;
+ this._render();
+ return
+ }
+ this._checked = new Set();
+ this._doImpl('/_/save_silence', silence, json => this._silenceAction(json, false));
+ }
+
_deleteSilenceParam(silence) {
// Don't save silences that are just being created when you delete a param.
if (!silence.key) {
diff --git a/am/modules/silence-sk/silence-sk.js b/am/modules/silence-sk/silence-sk.js
index 9441b7d..bef2b9f 100644
--- a/am/modules/silence-sk/silence-sk.js
+++ b/am/modules/silence-sk/silence-sk.js
@@ -75,8 +75,19 @@
* silence: {...},
* }
* </pre>
+ *
+ * @evt add-silence-param Sent when the user add a param to a silence.
+ * The detail is a copy of the silence with the new parameter added.
+ *
+ * <pre>
+ * detail {
+ * silence: {...},
+ * }
+ * </pre>
+ *
*/
import { define } from 'elements-sk/define'
+import 'elements-sk/icon/add-box-icon-sk'
import 'elements-sk/icon/delete-icon-sk'
import * as paramset from '../paramset'
@@ -88,9 +99,9 @@
import { upgradeProperty } from 'elements-sk/upgradeProperty'
function table(ele, o) {
- let keys = Object.keys(o);
+ const keys = Object.keys(o);
keys.sort();
- return keys.filter(k => !k.startsWith('__')).map((k) =>
+ const rules = keys.filter(k => !k.startsWith('__')).map((k) =>
html`
<tr>
<td>
@@ -101,6 +112,20 @@
<input @change=${(e) => ele._modifyRule(e, k)} .value=${o[k].join(', ')} ?disabled=${o[k].length > 1}></input>
</td>
</tr>`);
+ rules.push(html`
+ <tr>
+ <td>
+ <add-box-icon-sk title='Add rule.' @click=${(e) => ele._addRule(e)}></add-box-icon-sk>
+ </td>
+ <td>
+ <input id='add_param_key'></input>
+ </td>
+ <td>
+ <input id='add_param_value'></input>
+ </td>
+ </tr>
+ `);
+ return rules;
}
function addNote(ele) {
@@ -263,6 +288,33 @@
this.dispatchEvent(new CustomEvent('modify-silence-param', { detail: detail, bubbles: true }));
}
+ _addRule(e) {
+ const keyInput = $$("#add_param_key", this);
+ if (!keyInput.value) {
+ errorMessage("Please enter a name for the new param");
+ keyInput.focus();
+ return;
+ }
+ const valueInput = $$("#add_param_value", this);
+ if (!valueInput.value) {
+ errorMessage("Please enter a value for the new param");
+ valueInput.focus();
+ return;
+ }
+
+ // Dispatch event adding the new silence param.
+ let silence = JSON.parse(JSON.stringify(this._state));
+ silence.param_set[keyInput.value] = [valueInput.value];
+ let detail = {
+ silence: silence,
+ };
+ this.dispatchEvent(new CustomEvent('add-silence-param', { detail: detail, bubbles: true }));
+
+ // Reset the manual param key and value.
+ keyInput.value = "";
+ valueInput.value = "";
+ }
+
_addNote(e) {
let textarea = $$('textarea', this);
let detail = {