blob: 61334dc5461d2f31a729cf1b5c933376ed95a7b3 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<link type="text/css" rel="stylesheet" href="/dashboard/static/base.css">
<title>Edit Sheriff Rotations</title>
<script>
'use strict';
// This should be an Object mapping sheriff names to Objects which
// have the properties for each sheriff rotation, including
// "url", "email", "patterns", "internal_only", and "summarize".
var SHERIFF_DATA = {{sheriffs_json | safe}};
var XSRF_TOKEN = '{{xsrf_token}}';
/**
* Initializes the event listeners for events on the form.
*/
function initialize() {
var addListener = function(elementId, eventName, callback) {
var element = document.getElementById(elementId);
element.addEventListener(eventName, callback, true);
};
addListener('edit-name', 'change', onEditFocus);
addListener('edit-name', 'focus', onEditFocus);
addListener('edit-radio', 'focus', onEditFocus);
addListener('add-name', 'focus', onAddFocus);
addListener('add-radio', 'focus', onAddFocus);
addListener('list-tests-button', 'click', listTests);
}
/**
* Handler for when "Edit existing sheriff" is checked.
* Updates the form with the properties of the selected existing sheriff.
*/
function onEditFocus() {
document.getElementById('edit-radio').checked = true;
var selectMenu = document.getElementById('edit-name');
var sheriffName = selectMenu.options[selectMenu.selectedIndex].value;
var sheriff = SHERIFF_DATA[sheriffName];
document.getElementById('url').value = sheriff['url'];
document.getElementById('email').value = sheriff['email'];
document.getElementById('stoppage-alert-delay').value =
sheriff['stoppage_alert_delay'];
var internalOnly = sheriff['internal_only'] ? 'yes' : 'no';
document.getElementById('internal-only-' + internalOnly).checked = true;
var summarize = sheriff['summarize'] ? 'yes' : 'no';
document.getElementById('summarize-' + summarize).checked = true;
document.getElementById('patterns-textarea').value = sheriff['patterns'];
document.getElementById('list-tests-button').hidden = false;
}
/**
* Handler for when "Add a new config" is checked; clears the form.
*/
function onAddFocus() {
document.getElementById('add-radio').checked = true;
document.getElementById('url').value = '';
document.getElementById('email').value = '';
document.getElementById('stoppage-alert-delay').value = -1;
document.getElementById('internal-only-yes').checked = true;
document.getElementById('summarize-no').checked = true;
document.getElementById('patterns-textarea').textContent = '';
document.getElementById('list-tests-button').hidden = true;
}
/**
* Shows a list of all the tests for a given sheriff.
* @param {Event} clickEvent The click event that this function handles.
*/
function listTests(clickEvent) {
var selectMenu = document.getElementById('edit-name');
var sheriffName = selectMenu.options[selectMenu.selectedIndex].value;
if (sheriffName == '') {
console.error('Sheriff name is empty, cannot list tests.');
return;
}
var xhr = new XMLHttpRequest();
xhr.onload = function showSheriffs() {
var arr = JSON.parse(xhr.responseText);
document.getElementById('matching-list').innerHTML = arr.join('<br>');
};
xhr.open(
'GET', '/list_monitored_tests?get-sheriffed-by=' +
encodeURIComponent(sheriffName));
xhr.send();
document.getElementById('matching-list').innerHTML =
'<img src="//www.google.com/images/loading.gif">';
clickEvent.preventDefault();
}
window.addEventListener('DOMContentLoaded', initialize, true);
</script>
</head>
<body>
{% include 'nav.html' %}
<h1>Edit Sheriffs</h1>
<p><b>Note</b>: If the test path patterns of two different sheriffs
threshold configurations both match some test, then the sheriff whose
name comes first according to lexicographical sort order will apply.</p>
<form method="POST">
{{xsrf_input | safe}}
<label>
<input type="radio" name="add-edit" id="add-radio" value="add" checked>
Add a new config named:
</label>
<input type="text" name="add-name" id="add-name"><br>
<label>
<input type="radio" name="add-edit" id="edit-radio" value="edit">
Edit existing config:
</label>
<select name="edit-name" id="edit-name">
{% for name in sheriff_names %}
<option value="{{name}}">{{name}}</option>
{% endfor %}
</select><br>
<table>
<tr>
<td><label for="url">Rotation URL:</label></td>
<td><input type="url" name="url" id="url" size=75> </td>
</tr>
<td><label for="email">Notification Email:</label></td>
<td><input type="email" name="email" id="email" size=75></td>
</tr>
</tr>
<td><label for="email">Days before alerting on missing data
(-1 for no alerts):</label></td>
<td><input type="number"
name="stoppage-alert-delay"
id="stoppage-alert-delay"
min="-1" max="13"></td>
</tr>
<tr>
<td>Internal-only:</td>
<td>
<label><input type="radio" name="internal-only" id="internal-only-yes"
value="true" checked>yes</label>
<label><input type="radio" name="internal-only" id="internal-only-no"
value="false">no</label>
</td>
</tr>
<tr>
<td>Summarize Email:</td>
<td>
<label><input type="radio" name="summarize" id="summarize-yes"
value="true">yes</label>
<label><input type="radio" name="summarize" id="summarize-no"
value="false" checked>no</label>
</td>
</tr>
</table>
Patterns:<br>
<textarea name="patterns" id="patterns-textarea"
rows="15" cols="72"></textarea><br>
<button type="submit">Submit</button><br><br>
<button id="list-tests-button" hidden>List monitored tests</button>
<div id="matching-list"></div>
</form>
</body>
</html>