From 8f74aa639759f400120794355511327fa74905da Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Onofré Date: Tue, 20 Oct 2015 08:45:39 +0100 Subject: [SPARK-10876] Display total uptime for completed applications MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Author: Jean-Baptiste Onofré Closes #9059 from jbonofre/SPARK-10876. --- .../scala/org/apache/spark/ui/jobs/AllJobsPage.scala | 18 +++++++++++------- .../org/apache/spark/ui/jobs/JobProgressListener.scala | 7 ++++++- 2 files changed, 17 insertions(+), 8 deletions(-) (limited to 'core') 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 =
    - {if (parent.sc.isDefined) { - // Total duration is not meaningful unless the UI is live -
  • - Total Uptime: - {UIUtils.formatDuration(System.currentTimeMillis() - startTime)} -
  • - }} +
  • + Total Uptime: + { + if (endTime < 0 && parent.sc.isDefined) { + UIUtils.formatDuration(System.currentTimeMillis() - startTime) + } else if (endTime > 0) { + UIUtils.formatDuration(endTime - startTime) + } + } +
  • Scheduling Mode: {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. -- cgit v1.2.3