@@ -31,10 +31,21 @@ private[ui] class AllJobsPage(parent: JobsTab) extends WebUIPage("") {
31
31
private val startTime : Option [Long ] = parent.sc.map(_.startTime)
32
32
private val listener = parent.listener
33
33
34
+ private def getlastStageDescription (job : JobUIData ) = {
35
+ val lastStageInfo = Option (job.stageIds)
36
+ .filter(_.nonEmpty)
37
+ .flatMap { ids => listener.stageIdToInfo.get(ids.max)}
38
+ val lastStageData = lastStageInfo.flatMap { s =>
39
+ listener.stageIdToData.get((s.stageId, s.attemptId))
40
+ }
41
+ lastStageData.flatMap(_.description).getOrElse(" " )
42
+ }
43
+
34
44
private def applicationTimelineView (jobs : Seq [JobUIData ], now : Long ): Seq [Node ] = {
35
45
val jobEventJsonAsStrSeq = jobs.flatMap { jobUIData =>
36
46
val jobId = jobUIData.jobId
37
47
val status = jobUIData.status
48
+ val jobDescription = getlastStageDescription(jobUIData)
38
49
val submissionTimeOpt = jobUIData.submissionTime
39
50
val completionTimeOpt = jobUIData.completionTime
40
51
@@ -58,8 +69,8 @@ private[ui] class AllJobsPage(parent: JobsTab) extends WebUIPage("") {
58
69
| 'group': 'jobs',
59
70
| 'start': new Date( ${submissionTime}),
60
71
| 'end': new Date( ${completionTime}),
61
- | 'content': '<div class="application-timeline-content">Job ${jobId}</div>',
62
- | 'title': 'Job ${jobId}\\ nStatus: ${status}\\ n' +
72
+ | 'content': '<div class="application-timeline-content"> ${jobDescription} ( Job ${jobId}) </div>',
73
+ | 'title': ' ${jobDescription} ( Job ${jobId}) \\ nStatus: ${status}\\ n' +
63
74
| 'Submission Time: ${UIUtils .formatDate(new Date (submissionTime))}' +
64
75
| ' ${
65
76
if (status != JobExecutionStatus .RUNNING ) {
@@ -70,7 +81,7 @@ private[ui] class AllJobsPage(parent: JobsTab) extends WebUIPage("") {
70
81
}'
71
82
|}
72
83
""" .stripMargin
73
- Option (jobEventJsonAsStr)
84
+ Some (jobEventJsonAsStr)
74
85
}
75
86
76
87
val executorEventJsonAsStrSeq =
@@ -169,7 +180,7 @@ private[ui] class AllJobsPage(parent: JobsTab) extends WebUIPage("") {
169
180
}
170
181
171
182
val lastStageName = lastStageInfo.map(_.name).getOrElse(" (Unknown Stage Name)" )
172
- val lastStageDescription = lastStageData.flatMap(_.description).getOrElse(" " )
183
+ val lastStageDescription = getlastStageDescription(job) // lastStageData.flatMap(_.description).getOrElse("")
173
184
val duration : Option [Long ] = {
174
185
job.submissionTime.map { start =>
175
186
val end = job.completionTime.getOrElse(System .currentTimeMillis())
0 commit comments