Skip to content

Commit b3e2370

Browse files
author
pgandhi
committed
[SPARK-21809] : Adding pagination feature to event timeline graph
1 parent a696dcc commit b3e2370

File tree

1 file changed

+49
-4
lines changed

1 file changed

+49
-4
lines changed

core/src/main/scala/org/apache/spark/ui/jobs/StagePage.scala

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,14 @@ private[ui] class StagePage(parent: StagesTab, store: AppStatusStore) extends We
9292
val parameterTaskSortDesc = UIUtils.stripXSS(request.getParameter("task.desc"))
9393
val parameterTaskPageSize = UIUtils.stripXSS(request.getParameter("task.pageSize"))
9494

95+
val eventTimelineParameterTaskPage = UIUtils.stripXSS(
96+
request.getParameter("task.eventTimelinePageNumber"))
97+
val eventTimelineParameterTaskPageSize = UIUtils.stripXSS(
98+
request.getParameter("task.eventTimelinePageSize"))
99+
var eventTimelineTaskPage = Option(eventTimelineParameterTaskPage).map(_.toInt).getOrElse(1)
100+
var eventTimelineTaskPageSize = Option(
101+
eventTimelineParameterTaskPageSize).map(_.toInt).getOrElse(100)
102+
95103
val taskPage = Option(parameterTaskPage).map(_.toInt).getOrElse(1)
96104
val taskSortColumn = Option(parameterTaskSortColumn).map { sortColumn =>
97105
UIUtils.decodeURLParameter(sortColumn)
@@ -132,6 +140,14 @@ private[ui] class StagePage(parent: StagesTab, store: AppStatusStore) extends We
132140
} else {
133141
s"$totalTasks, showing $storedTasks"
134142
}
143+
if (eventTimelineTaskPageSize < 1 || eventTimelineTaskPageSize > totalTasks) {
144+
eventTimelineTaskPageSize = totalTasks
145+
}
146+
val eventTimelineTotalPages =
147+
(totalTasks + eventTimelineTaskPageSize - 1) / eventTimelineTaskPageSize
148+
if (eventTimelineTaskPage < 1 || eventTimelineTaskPage > eventTimelineTotalPages) {
149+
eventTimelineTaskPage = 1
150+
}
135151

136152
val summary =
137153
<div>
@@ -247,9 +263,12 @@ private[ui] class StagePage(parent: StagesTab, store: AppStatusStore) extends We
247263
makeTimeline(
248264
// Only show the tasks in the table
249265
Option(taskTable).map({ taskPagedTable =>
250-
val from = (taskPage - 1) * taskPageSize
251-
val to = taskPagedTable.dataSource.dataSize.min(taskPage * taskPageSize)
252-
taskPagedTable.dataSource.sliceData(from, to)}).getOrElse(Nil), currentTime) ++
266+
val from = (eventTimelineTaskPage - 1) * eventTimelineTaskPageSize
267+
val to = taskPagedTable.dataSource.dataSize.min(
268+
eventTimelineTaskPage * eventTimelineTaskPageSize)
269+
taskPagedTable.dataSource.sliceData(from, to)}).getOrElse(Nil), currentTime,
270+
eventTimelineTaskPage, eventTimelineTaskPageSize, eventTimelineTotalPages, stageId,
271+
stageAttemptId, totalTasks) ++
253272
<div id="parent-container">
254273
<script src={UIUtils.prependBaseUri(request, "/static/utils.js")}></script>
255274
<script src={UIUtils.prependBaseUri(request, "/static/stagepage.js")}></script>
@@ -259,7 +278,8 @@ private[ui] class StagePage(parent: StagesTab, store: AppStatusStore) extends We
259278

260279
}
261280

262-
def makeTimeline(tasks: Seq[TaskData], currentTime: Long): Seq[Node] = {
281+
def makeTimeline(tasks: Seq[TaskData], currentTime: Long, page: Int, pageSize: Int,
282+
totalPages: Int, stageId: Int, stageAttemptId: Int, totalTasks: Int): Seq[Node] = {
263283
val executorsSet = new HashSet[(String, String)]
264284
var minLaunchTime = Long.MaxValue
265285
var maxFinishTime = Long.MinValue
@@ -418,6 +438,31 @@ private[ui] class StagePage(parent: StagesTab, store: AppStatusStore) extends We
418438
<input type="checkbox"></input>
419439
<span>Enable zooming</span>
420440
</div>
441+
<div>
442+
<form id={s"form-event-timeline-page"}
443+
method="get"
444+
action=""
445+
class="form-inline pull-right"
446+
style="margin-bottom: 0px;">
447+
<label>Tasks: {totalTasks}. {totalPages} Pages. Jump to</label>
448+
<input type="hidden" name="id" value={stageId.toString} />
449+
<input type="hidden" name="attempt" value={stageAttemptId.toString} />
450+
<input type="text"
451+
name="task.eventTimelinePageNumber"
452+
id={s"form-event-timeline-page-no"}
453+
value={page.toString} class="span1" />
454+
455+
<label>. Show </label>
456+
<input type="text"
457+
id={s"form-event-timeline-page-size"}
458+
name="task.eventTimelinePageSize"
459+
value={pageSize.toString}
460+
class="span1" />
461+
<label>items in a page.</label>
462+
463+
<button type="submit" class="btn">Go</button>
464+
</form>
465+
</div>
421466
</div>
422467
{TIMELINE_LEGEND}
423468
</div> ++

0 commit comments

Comments
 (0)