blob: 74ce0d0d22b4f479d6d18dd27a7adac3b44ef4ab [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2016 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<html>
<head>
<link type="text/css" rel="stylesheet" href="/dashboard/static/base.css">
<link rel="import" href="/dashboard/elements/nav-bar.html">
<title>Edit Anomaly Configs</title>
<script>
'use strict';
// This should be an Object mapping anomaly config names to Objects
// which have the properties "config" and "patterns".
var ANOMALY_CONFIG_DATA = {{anomaly_config_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', onEditConfigSelect);
addListener('edit-name', 'focus', onEditConfigSelect);
addListener('add-name', 'focus', onAddConfigFocus);
}
/**
* Updates the interface when a new anomaly config is selected to be edited.
* @param {Event} e The change event for the select.
*/
function onEditConfigSelect(e) {
// Update the radio, which indicates we're editing an existing config.
document.getElementById('edit-radio').checked = true;
// Get the config information and fill in the text areas.
var dropDown = e.target;
var selectedConfigName = dropDown.options[dropDown.selectedIndex].value;
var selectedConfig = window.ANOMALY_CONFIG_DATA[selectedConfigName];
var configTextarea = document.getElementById('config-textarea');
var patternsTextarea = document.getElementById('patterns-textarea');
configTextarea.value = selectedConfig['config'];
patternsTextarea.value = selectedConfig['patterns'];
}
/**
* Updates the interface when the user focuses the add config name field.
* @param {Event} _ The focus event for the input, not used.
*/
function onAddConfigFocus(_) {
document.getElementById('add-radio').checked = true;
}
window.addEventListener('DOMContentLoaded', initialize, true);
</script>
</head>
<body>
<nav-bar></nav-bar>
<h1>Edit Anomaly Configs</h1>
<p><b>Note</b>: If the test path patterns of two different anomaly
threshold configurations both match some test, then the anomaly config
pattern whose name comes first according to lexicographical sort
order will apply. You can use this to create "higher priority" anomaly
threshold configurations which applies to a smaller subset of tests.</p>
<p><b>Warning</b>: If a test path pattern matches too many tests,
this page may time out. If you try to add a test path pattern,
e.g. <code>ChromiumPerf/*/foo*/*/*</code>, and it times out,
try separating the pattern into multiple patterns that match
fewer tests, e.g. <code>ChromiumPerf/*/foo.bar/*/*</code> and
<code>ChromiumPerf/*/foo.baz/*/*.</code></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 anomaly_config_names %}
<option value="{{name}}">{{name}}</option>
{% endfor %}
</select><br>
<textarea name="config" id="config-textarea"
rows="8" cols="72">{}</textarea><br>
<textarea name="patterns" id="patterns-textarea"
rows="20" cols="72"></textarea><br>
<input type="submit">
</form>
</body>
</html>