blob: 190727988f2b5b380454223863e4b962645cbe5c [file] [log] [blame]
<!--
The <lua-script-runs-sk> custom element declaration. Displays a table with details about each
completed and pending Lua script task.
Attributes:
defaultSize: The number of tasks to show per page, default 10.
constrainByUser: Whether to show only tasks created by the logged-in user initially, default
false.
myRunsConstrainText: Button text to constrain by user, default "View only my runs".
everyonesRunsConstrainText: Button text to disable constraining by user, default "View
everyone's runs".
constrainByTestRun: Whether to show only non-test tasks, default true. Test tasks are those that
use the "Dummy1k" page sets.
nonTestRunsConstrainText: Button text to constrain to non-test tasks, default "Exclude test
runs".
testRunsConstrainText: Button text to disable constraining by test tasks, default "Include test
runs".
Events:
None.
Methods:
reload: queries for updated information on tasks.
resetPagination: Moves to the first page of tasks.
constrainRunsByUser: Toggles constrainByUser and reloads the appropriate data.
constrainTestRuns: Toggles constrainByTestRun and reloads the appropriate data.
-->
<dom-module id="lua-script-runs-sk">
<style>
paper-dialog {
min-width: 200px;
max-width: calc(100% - 10px);
}
table.runshistory {
border-spacing: 0px;
}
tr.headers {
background-color: #CCCCFF;
text-align: center;
}
td.nowrap {
white-space: nowrap;
}
table.runshistory > tbody > tr > td {
padding: 10px;
border: solid black 1px;
}
.delete-button, .redo-button {
--paper-icon-button-disabled: {
display: none;
}
}
.oldruns {
margin-left: 20px;
}
</style>
<template>
<confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
<h2><template is="dom-if" if="{{constrainByUser}}">My </template>Lua Script Runs</h2>
<paging-sk pagination="{{pagination}}" on-pagechange="pageChangedHandler"></paging-sk>
<br/>
<paper-button raised on-click="constrainRunsByUser">{{
constrainButtonText(constrainByUser, myRunsConstrainText, everyonesRunsConstrainText)
}}</paper-button>
<paper-button raised on-click="constrainTestRuns">{{
constrainButtonText(constrainByTestRun, nonTestRunsConstrainText, testRunsConstrainText)
}}</paper-button>
<br/>
<br/>
<!-- Section for popups. -->
<template is="dom-repeat" items="{{luaScriptTasks}}" as="luaScriptTask" index-as="index">
<paper-dialog heading="Lua Script" id="{{ getLuaScriptId(index) }}">
<paper-dialog-scrollable>
<pre>{{luaScriptTask.LuaScript}}</pre>
</paper-dialog-scrollable>
</paper-dialog>
<paper-dialog heading="Lua Aggregator Script" id="{{ getLuaAggregatorScriptId(index) }}">
<paper-dialog-scrollable>
<pre>{{luaScriptTask.LuaAggregatorScript}}</pre>
</paper-dialog-scrollable>
</paper-dialog>
</template>
<table class="runshistory" id="runshistory" cellpadding="5" border="1">
<tr class="headers">
<td>Id</td>
<td>User</td>
<td>Timestamps</td>
<td>SKP Repository</td>
<td>Description</td>
<td>Scripts</td>
<td>Results</td>
<td>Task Repeats</td>
</tr>
<template is="dom-repeat" items="{{luaScriptTasks}}" as="luaScriptTask" index-as="index">
<tr style="border: 1px solid black;">
<!-- Id col -->
<td class="nowrap">
<span>{{luaScriptTask.Id}}</span>
<paper-icon-button icon="delete" mini
class="delete-button"
disabled="{{!luaScriptTask.canDelete}}"
alt="Delete"
data-index$="{{index}}"
data-type="delete">
</paper-icon-button>
<paper-icon-button icon="redo" mini
class="redo-button"
disabled="{{!luaScriptTask.canRedo}}"
alt="Redo"
data-index$="{{index}}"
data-type="redo">
</paper-icon-button>
</td>
<!-- User col -->
<td>{{luaScriptTask.Username}}</td>
<!-- Timestamps col -->
<td>
<table>
<tr>
<td>Added:</td>
<td class="nowrap">{{ formatTimestamp(luaScriptTask.TsAdded) }}</td>
</tr>
<tr>
<td>Started:</td>
<td class="nowrap">{{ formatTimestamp(luaScriptTask.TsStarted) }}</td>
</tr>
<tr>
<td>Completed:</td>
<td class="nowrap">{{ formatTimestamp(luaScriptTask.TsCompleted) }}</td>
</tr>
</table>
</td>
<!-- SKP Repository col -->
<td>
<table>
<tr>
<td>PageSet:</td>
<td>{{luaScriptTask.PageSets}}</td>
</tr>
<tr>
<td>ChromiumBuild:</td>
<td class="nowrap">
<a href="{{chromiumCommitUrl(luaScriptTask.ChromiumRev)}}">{{shortHash(luaScriptTask.ChromiumRev)}}</a>-<a href="{{skiaCommitUrl(luaScriptTask.SkiaRev)}}">{{shortHash(luaScriptTask.SkiaRev)}}</a>
</td>
</tr>
</table>
</td>
<!-- Description col -->
<td>{{luaScriptTask.Description}}</td>
<!-- Scripts -->
<td class="nowrap">
<a href="javascript:void(0);" data-index$="{{index}}" data-type="luaScript">Script</a>
<template is="dom-if" if="{{luaScriptTask.LuaAggregatorScript}}">
<br/>
<a href="javascript:void(0);" data-index$="{{index}}"
data-type="luaAggregatorScript">Aggregator Script</a>
</template>
</td>
<!-- Results col -->
<td class="nowrap">
<template is="dom-if" if="{{luaScriptTask.Failure}}">
<div style="color:red;">Failed</div>
</template>
<template is="dom-if" if="{{!luaScriptTask.TaskDone}}">
<div style="color:green;">Waiting</div>
</template>
<template is="dom-if" if="{{luaScriptTask.ScriptOutput}}">
<a href="{{luaScriptTask.ScriptOutput}}" target="_blank">Script Output</a>
</template>
<template is="dom-if" if="{{luaScriptTask.AggregatedOutput}}">
<br/>
<a href="{{luaScriptTask.AggregatedOutput}}"
target="_blank">Aggregated Output</a>
</template>
<template is="dom-if" if="{{luaScriptTask.SwarmingLogs}}">
<br/>
<a href="{{luaScriptTask.SwarmingLogs}}" target="_blank">Swarming Logs</a>
</template>
</td>
<!-- Task Repeats -->
<td>{{ formatRepeatAfterDays(luaScriptTask.RepeatAfterDays) }}</td>
</tr>
</template>
</table>
</template>
</dom-module>
<script>
Polymer({
is: "lua-script-runs-sk",
properties: {
luaScriptTasks: {
type: Array,
value: function() { return []; },
},
defaultSize: {
type: Number,
value: 10,
},
constrainByUser: {
type: Boolean,
value: false,
},
myRunsConstrainText: {
type: String,
value: "View only my runs",
},
everyonesRunsConstrainText: {
type: String,
value: "View everyone's runs",
},
constrainByTestRun: {
type: Boolean,
value: true,
},
nonTestRunsConstrainText: {
type: String,
value: "Exclude test runs",
},
testRunsConstrainText: {
type: String,
value: "Include test runs",
},
pagination: {
type: Object,
value: function() { return {}; },
},
pageChangedHandler: {
type: Object,
value: function() { return null; },
},
},
ready: function() {
this.pagination = {"offset": 0, "size": this.defaultSize};
this.pageChangedHandler = this.reload.bind(this);
this.reload();
var that = this;
this.$.runshistory.addEventListener('click', function(e) {
var anchor = sk.findParent(e.target, "A");
if (anchor != null) {
var id = anchor.dataset.index;
if (anchor.dataset.type == "luaScript") {
that.toggleDialog(that.getLuaScriptId(id));
} else if (anchor.dataset.type == "luaAggregatorScript") {
that.toggleDialog(that.getLuaAggregatorScriptId(id));
}
}
var button = sk.findParent(e.target, "PAPER-ICON-BUTTON");
if (button != null) {
if (button.dataset.type == "delete") {
var index = button.dataset.index;
that.$.confirm_dialog.open("Proceed with deleting task?")
.then(that.deleteTask.bind(that, index));
} else if (button.dataset.type == "redo") {
var index = button.dataset.index;
that.$.confirm_dialog.open("Reschedule this task?")
.then(that.redoTask.bind(that, index));
}
}
});
},
reload: function() {
var queryParams = {
"offset": this.pagination.offset,
"size": this.pagination.size,
}
if (this.constrainByUser) {
queryParams["filter_by_logged_in_user"] = true;
}
if (this.constrainByTestRun) {
queryParams["exclude_dummy_page_sets"] = true;
}
var queryStr = "?" + sk.query.fromObject(queryParams);
sk.post('/_/get_lua_script_tasks' + queryStr).then(JSON.parse).then(function(json) {
this.pagination = json.pagination;
this.luaScriptTasks = json.data;
for (var i = 0; i < this.luaScriptTasks.length; i++) {
this.luaScriptTasks[i].canDelete = json.permissions[i].DeleteAllowed;
this.luaScriptTasks[i].canRedo = json.permissions[i].RedoAllowed;
this.luaScriptTasks[i].Id = json.ids[i];
}
}.bind(this)).catch(sk.errorMessage);
},
getLuaScriptId: function(index) {
return "lua_script" + index;
},
getLuaAggregatorScriptId: function(index) {
return "lua_aggregator_script" + index;
},
resetPagination: function() {
this.pagination.offset = 0;
this.pagination.size = this.defaultSize;
},
constrainRunsByUser: function() {
this.constrainByUser = !this.constrainByUser;
this.resetPagination();
this.reload();
},
constrainTestRuns: function() {
this.constrainByTestRun = !this.constrainByTestRun;
this.resetPagination();
this.reload();
},
constrainButtonText: function(constrained, constrainText, unconstrainText) {
if (constrained) {
return unconstrainText;
} else {
return constrainText;
}
},
toggleDialog: function(id) {
Polymer.dom(this.root).querySelector('#' + id).toggle();
},
deleteTask: function(deleteIndex) {
var params = {};
params["id"] = this.luaScriptTasks[deleteIndex].Id;
sk.post("/_/delete_lua_script_task", JSON.stringify(params)).then(function() {
$$$("#confirm_toast").text = "Deleted task " + params["id"];
$$$("#confirm_toast").show();
}.bind(this)).catch(sk.errorMessage).then(function() {
this.reload();
}.bind(this));
},
redoTask: function(redoIndex) {
var params = {};
params["id"] = this.luaScriptTasks[redoIndex].Id;
sk.post("/_/redo_lua_script_task", JSON.stringify(params)).then(function() {
$$$("#confirm_toast").text = "Resubmitted task " + params["id"];
$$$("#confirm_toast").show();
}.bind(this)).catch(sk.errorMessage).then(function() {
this.reload();
}.bind(this));
},
chromiumCommitUrl: ctfe.chromiumBuild.chromiumCommitUrl,
skiaCommitUrl: ctfe.chromiumBuild.skiaCommitUrl,
shortHash: ctfe.chromiumBuild.shortHash,
formatTimestamp: ctfe.getFormattedTimestamp,
formatRepeatAfterDays: ctfe.formatRepeatAfterDays,
});
</script>