Skip to content

Commit e88f70d

Browse files
committed
adjust the page structure,
1 parent c3dc9b7 commit e88f70d

File tree

2 files changed

+35
-34
lines changed

2 files changed

+35
-34
lines changed

core/src/main/resources/org/apache/spark/ui/static/table.js

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -31,38 +31,40 @@ function stripeSummaryTable() {
3131
});
3232
}
3333

34-
function toggleThreadStackTrace(threadId) {
35-
var threadCell = $("#" + threadId + "_stacktrace");
36-
var columnHeader = $('#stacktrace_column');
37-
var bindNum = parseInt(columnHeader.attr('bind'));
38-
if (threadCell.hasClass('hidden')) {
39-
// expand thread cell
40-
columnHeader.attr("bind", bindNum + 1);
41-
columnHeader.removeClass("hidden");
42-
threadCell.removeClass('hidden');
34+
function toggleThreadStackTrace(threadId, forceAdd) {
35+
var stackTrace = $("#" + threadId + "_stacktrace")
36+
if (stackTrace.length == 0) {
37+
var stackTraceText = $('#' + threadId + "_td_stacktrace").html()
38+
var threadCell = $("#thread_" + threadId + "_tr")
39+
threadCell.after("<tr id=\"" + threadId +"_stacktrace\" class=\"accordion-body\"><td colspan=\"3\"><pre>" +
40+
stackTraceText + "</pre></td></tr>")
4341
} else {
44-
// collapse thread cell
45-
columnHeader.attr("bind", bindNum - 1);
46-
if (bindNum - 1 == 0) {
47-
columnHeader.addClass("hidden");
42+
if (!forceAdd) {
43+
stackTrace.remove()
4844
}
49-
threadCell.addClass('hidden');
5045
}
5146
}
5247

5348
// expandOrCollapse - true: expand, false: collapse
54-
function expandOrCollapseAllThreadStackTrace(expandOrCollapse) {
55-
var columnHeader = $('#stacktrace_column');
49+
function expandOrCollapseAllThreadStackTrace(expandOrCollapse, toggleButton) {
5650
if (expandOrCollapse) {
57-
columnHeader.removeClass('hidden');
58-
$('.accordion-body').removeClass('hidden');
59-
columnHeader.attr("bind", $('.accordion-body').length);
60-
$('.expandbutton').toggleClass('hidden')
51+
$('.accordion-heading').each(function() {
52+
//get thread ID
53+
if (!$(this).hasClass("hidden")) {
54+
var trId = $(this).attr('id').match(/thread_([0-9]+)_tr/m)[1]
55+
toggleThreadStackTrace(trId, true)
56+
}
57+
})
58+
if (toggleButton) {
59+
$('.expandbutton').toggleClass('hidden')
60+
}
6161
} else {
62-
columnHeader.addClass('hidden');
63-
$('.accordion-body').addClass('hidden');
64-
columnHeader.attr("bind", 0);
65-
$('.expandbutton').toggleClass('hidden');
62+
$('.accordion-body').each(function() {
63+
$(this).remove()
64+
})
65+
if (toggleButton) {
66+
$('.expandbutton').toggleClass('hidden');
67+
}
6668
}
6769
}
6870

@@ -75,6 +77,8 @@ function onMouseOverAndOut(threadId) {
7577

7678
function onSearchStringChange() {
7779
var searchString = $('#search').val()
80+
//remove the stacktrace
81+
expandOrCollapseAllThreadStackTrace(false, false)
7882
if (searchString.length == 0) {
7983
$('tr').each(function() {
8084
$(this).removeClass('hidden')

core/src/main/scala/org/apache/spark/ui/exec/ExecutorThreadDumpPage.scala

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,26 +63,24 @@ private[ui] class ExecutorThreadDumpPage(parent: ExecutorsTab) extends WebUIPage
6363
}.map { thread =>
6464
val threadId = thread.threadId
6565
<tr id={s"thread_${threadId}_tr"} class="accordion-heading"
66-
onclick={s"toggleThreadStackTrace($threadId)"}
66+
onclick={s"toggleThreadStackTrace($threadId, false)"}
6767
onmouseover={s"onMouseOverAndOut($threadId)"}
6868
onmouseout={s"onMouseOverAndOut($threadId)"}>
6969
<td id={s"${threadId}_td_id"}>{threadId}</td>
7070
<td id={s"${threadId}_td_name"}>{thread.threadName}</td>
7171
<td id={s"${threadId}_td_state"}>{thread.threadState}</td>
72-
<td id={threadId + "_stacktrace"} class="accordion-body hidden">
73-
<pre>{thread.stackTrace}</pre>
74-
</td>
72+
<td id={s"${threadId}_td_stacktrace"} class="hidden">{thread.stackTrace}</td>
7573
</tr>
7674
}
7775

7876
<div class="row-fluid">
7977
<p>Updated at {UIUtils.formatDate(time)}</p>
8078
{
8179
// scalastyle:off
82-
<p><a class="expandbutton" onClick="expandOrCollapseAllThreadStackTrace(true)">
80+
<p><a class="expandbutton" onClick="expandOrCollapseAllThreadStackTrace(true, true)">
8381
Expand All
8482
</a></p>
85-
<p><a class="expandbutton hidden" onClick="expandOrCollapseAllThreadStackTrace(false)">
83+
<p><a class="expandbutton hidden" onClick="expandOrCollapseAllThreadStackTrace(false, true)">
8684
Collapse All
8785
</a></p>
8886
<div class="form-inline">
@@ -99,10 +97,9 @@ private[ui] class ExecutorThreadDumpPage(parent: ExecutorsTab) extends WebUIPage
9997
}
10098
<table class={UIUtils.TABLE_CLASS_STRIPED + " accordion-group" + " sortable"}>
10199
<thead>
102-
<th>Thread ID</th>
103-
<th>Thread Name</th>
104-
<th>Thread State</th>
105-
<th id='stacktrace_column' bind='0' class="hidden">Thread Stacktrace</th>
100+
<th onClick="expandOrCollapseAllThreadStackTrace(false, false)">Thread ID</th>
101+
<th onClick="expandOrCollapseAllThreadStackTrace(false, false)">Thread Name</th>
102+
<th onClick="expandOrCollapseAllThreadStackTrace(false, false)">Thread State</th>
106103
</thead>
107104
<tbody>{dumpRows}</tbody>
108105
</table>

0 commit comments

Comments
 (0)