aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorJean-Baptiste Onofré <jbonofre@apache.org>2015-10-20 08:45:39 +0100
committerSean Owen <sowen@cloudera.com>2015-10-20 08:45:39 +0100
commit8f74aa639759f400120794355511327fa74905da (patch)
tree5b322ca6f93624c90eaf5ad6de48856aca4195bb /core
parent8b877cc4ee46cad9d1f7cac451801c1410f6c1fe (diff)
downloadspark-8f74aa639759f400120794355511327fa74905da.tar.gz
spark-8f74aa639759f400120794355511327fa74905da.tar.bz2
spark-8f74aa639759f400120794355511327fa74905da.zip
[SPARK-10876] Display total uptime for completed applications
Author: Jean-Baptiste Onofré <jbonofre@apache.org> Closes #9059 from jbonofre/SPARK-10876.
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala18
-rw-r--r--core/src/main/scala/org/apache/spark/ui/jobs/JobProgressListener.scala7
2 files changed, 17 insertions, 8 deletions
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala b/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala
index 041cd55ea4..d467dd9e1f 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala
@@ -265,6 +265,7 @@ private[ui] class AllJobsPage(parent: JobsTab) extends WebUIPage("") {
val listener = parent.jobProgresslistener
listener.synchronized {
val startTime = listener.startTime
+ val endTime = listener.endTime
val activeJobs = listener.activeJobs.values.toSeq
val completedJobs = listener.completedJobs.reverse.toSeq
val failedJobs = listener.failedJobs.reverse.toSeq
@@ -289,13 +290,16 @@ private[ui] class AllJobsPage(parent: JobsTab) extends WebUIPage("") {
val summary: NodeSeq =
<div>
<ul class="unstyled">
- {if (parent.sc.isDefined) {
- // Total duration is not meaningful unless the UI is live
- <li>
- <strong>Total Uptime: </strong>
- {UIUtils.formatDuration(System.currentTimeMillis() - startTime)}
- </li>
- }}
+ <li>
+ <strong>Total Uptime:</strong>
+ {
+ if (endTime < 0 && parent.sc.isDefined) {
+ UIUtils.formatDuration(System.currentTimeMillis() - startTime)
+ } else if (endTime > 0) {
+ UIUtils.formatDuration(endTime - startTime)
+ }
+ }
+ </li>
<li>
<strong>Scheduling Mode: </strong>
{listener.schedulingMode.map(_.toString).getOrElse("Unknown")}
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/JobProgressListener.scala b/core/src/main/scala/org/apache/spark/ui/jobs/JobProgressListener.scala
index 0c854f0489..77d034fa5b 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/JobProgressListener.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/JobProgressListener.scala
@@ -53,8 +53,9 @@ class JobProgressListener(conf: SparkConf) extends SparkListener with Logging {
type PoolName = String
type ExecutorId = String
- // Applicatin:
+ // Application:
@volatile var startTime = -1L
+ @volatile var endTime = -1L
// Jobs:
val activeJobs = new HashMap[JobId, JobUIData]
@@ -536,6 +537,10 @@ class JobProgressListener(conf: SparkConf) extends SparkListener with Logging {
startTime = appStarted.time
}
+ override def onApplicationEnd(appEnded: SparkListenerApplicationEnd) {
+ endTime = appEnded.time
+ }
+
/**
* For testing only. Wait until at least `numExecutors` executors are up, or throw
* `TimeoutException` if the waiting time elapsed before `numExecutors` executors up.