diff options
author | Jean-Baptiste Onofré <jbonofre@apache.org> | 2015-10-20 08:45:39 +0100 |
---|---|---|
committer | Sean Owen <sowen@cloudera.com> | 2015-10-20 08:45:39 +0100 |
commit | 8f74aa639759f400120794355511327fa74905da (patch) | |
tree | 5b322ca6f93624c90eaf5ad6de48856aca4195bb /core | |
parent | 8b877cc4ee46cad9d1f7cac451801c1410f6c1fe (diff) | |
download | spark-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.scala | 18 | ||||
-rw-r--r-- | core/src/main/scala/org/apache/spark/ui/jobs/JobProgressListener.scala | 7 |
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. |