blob: 48441ff98d3b76b5a49a41a1ab0eb5f54d2b34d5 [file] [log] [blame]
<!--
This in an HTML Import-able file that contains the definition
of the following elements:
<task-popup-sk>
To use this file import it:
<link href="/res/imp/task-popup-sk.html" rel="import" />
Usage:
<task-popup-sk></task-popup-sk>
Properties:
task - Object representing the details for a task. Expect these attributes:
name: String, name of the task.
color: String, color to be used for task result display.
comments: Array of comment objects.
commits: Array of strings indicating which commits were part of the task.
status: String indicating the result status of the task.
commit_details: Object whose keys are commit hashes and values are objects with the following attributes:
shortAuthor: String, shortened version of the commit author.
shortHash: String, shortened version of the commit hash.
shortSubject: String, shortened version of the commit subject.
repo: The name (not the URL) of the repository of the commit.
repo_base: The base URL for commits. Commit hashes will be appended to this.
swarming_url: URL of the Swarming server.
Methods:
None.
Events:
None.
-->
<link rel="import" href="/res/imp/bower_components/iron-flex-layout/iron-flex-layout-classes.html">
<link rel="import" href="/res/imp/bower_components/paper-button/paper-button.html">
<link rel="import" href="/res/common/imp/comments-sk.html">
<link rel="import" href="/res/common/imp/styles-sk.html">
<link rel="import" href="status-popup.html">
<link rel="stylesheet" href="task_driver_sk-bundle.css">
<script src="task_driver_sk-bundle.js"></script>
<dom-module id="task-popup-sk">
<style include="status-popup iron-flex styles-sk">
a {
color: inherit;
}
paper-button[raised].colored {
background: #D95F02;
color: #fff;
font-size: 1.0em;
padding:5px;
border-radius: 3px;
}
.retry {
color: inherit;
background-color: inherit;
text-decoration:none;
}
td {
padding: 5px;
}
</style>
<template>
<div class="horizontal layout wrap">
<div class="flex">
<task-driver-sk id="tdStatus" style="display: none;" embedded></task-driver-sk>
<h3 id="nonTaskDriverHeader">
<a target="_blank" href$="[[swarming_url]]/task?id=[[task.swarming_task_id]]">
<span>{{task.name}}</span><iron-icon icon="launch"></iron-icon>
</a>
</h3>
</div>
<div>
<a href$="[[_retryUrl(task_scheduler_url, task)]]" target="_blank" class="retry">
<paper-button raised class="colored" role="button">Re-run Job</paper-button>
</a>
</div>
</div>
<div id="nonTaskDriverDetails">
<table>
<tr>
<td>Status:</td>
<td class$="[[_taskResultClass(task)]]">[[_taskResultString(task)]]</td>
</tr>
<tr>
<td>Context:</td>
<td><a href$="[[_taskUrl(task_scheduler_url, task)]]" target="_blank">View on Task Scheduler</a></td>
</tr>
<tr>
<td>Other Tasks Like This:</td>
<td>
<a target="_blank" rel="noopener" href$="[[swarming_url]]/tasklist?f=sk_name%3A[[task.name]]">View on Swarming</a>
</td>
</tr>
</table>
<hr/>
</div>
<h3>Blamelist</h3>
<table>
<template is="dom-repeat" items="[[task.commits]]" as="c">
<tr>
<td><a href$="[[_makeCommitURL(c, repo_base)]]">[[_commitHash(c, commit_details)]]</a></td>
<td>[[_commitAuthor(c, commit_details)]]</td>
<td>[[_commitSubject(c, commit_details)]]</td>
</tr>
</template>
</table>
<hr/>
<comments-sk
comments="{{task.comments}}"
add_comment_url="[[_makeAddCommentURL(task, repo)]]"
on-submit="_commentAdded"
allow_add_comment
allow_delete_comment
collapsible>
</comments-sk>
</template>
<script>
Polymer({
is: 'task-popup-sk',
behaviors: [SkiaBehaviors.StatusPopup],
properties: {
task: {
type: Object,
value: function() { return {}; },
},
commit_details: {
type: Object,
value: function() { return {}; },
},
repo: {
type: String,
value: "",
},
repo_base: {
type: String,
value: "",
},
swarming_url: {
type: String,
value: "",
},
task_scheduler_url: {
type: String,
value: "",
},
},
showCallback: function() {
sk.get("/json/td/" + this.task.id).then(JSON.parse).then(function(td) {
this.$.tdStatus.data = td;
this.$.tdStatus.style = "display: block";
this.$.nonTaskDriverHeader.style = "display: none";
this.$.nonTaskDriverDetails.style = "display: none";
}.bind(this));
},
_commentAdded: function() {
this.hide();
this.fire("reload", {});
},
_commitHash: function(c, commit_details) {
return commit_details[c] ? commit_details[c].shortHash : "";
},
_commitAuthor: function(c, commit_details) {
return commit_details[c] ? commit_details[c].shortAuthor : "";
},
_commitSubject: function(c, commit_details) {
return commit_details[c] ? commit_details[c].shortSubject : "";
},
_makeAddCommentURL: function(task, repo) {
return "/json/tasks/" + task.id + "/comments";
},
_makeCommitURL: function(c, repo_base) {
return repo_base + c;
},
_retryUrl: function(task_scheduler_url, task) {
if (!task || !task.name || !task_scheduler_url) {
return "";
}
// TODO(borenet): This is not correct in some cases. Now that we have a
// link from Task to Job in the scheduler, we should be able to come up
// with a better way to "re-open" a failed Job, essentially resetting
// the attempt counts so that we can retry the failed task(s).
var job = task.name;
var uploadPrefix = "Upload-"
if (job.indexOf(uploadPrefix) == 0) {
job = job.substring(uploadPrefix.length);
}
return this.task_scheduler_url + "/trigger?submit=true&job=" + job + "@" + task.revision;
},
_taskResultClass: function(task) {
return task.colorClass;
},
_taskResultString: function(task) {
return task.status;
},
_taskUrl: function(task_scheduler_url, task) {
if (!task || !task.id || !task_scheduler_url) {
return "";
}
return this.task_scheduler_url + "/task/" + task.id;
},
});
</script>
</dom-module>