[SPARK-7391] DAG visualization: auto expand if linked from another viz

This is an addition to #5729.

If you click into a stage from the DAG viz on the job page, you might expect to expand on the stage. However, once you get to the stage page, you actually have to expand the DAG viz there yourself.

This patch makes this happen automatically. It's a small UX improvement.

Author: Andrew Or <andrew@databricks.com>

Closes #5958 from andrewor14/viz-auto-expand and squashes the following commits:

03cd157 [Andrew Or] Automatically expand DAG viz if from job page

(cherry picked from commit f1216514b8)
Signed-off-by: Andrew Or <andrew@databricks.com>
This commit is contained in:
Andrew Or 2015-05-07 12:29:18 -07:00
parent 226033cfff
commit 800c0fc8d5
3 changed files with 23 additions and 3 deletions

View file

@ -178,8 +178,8 @@ function renderDagVizForJob(svgContainer) {
var stageId = metadata.attr("stage-id");
var containerId = VizConstants.graphPrefix + stageId;
// Link each graph to the corresponding stage page (TODO: handle stage attempts)
var stageLink =
"/stages/stage/?id=" + stageId.replace(VizConstants.stagePrefix, "") + "&attempt=0";
var stageLink = "/stages/stage/?id=" +
stageId.replace(VizConstants.stagePrefix, "") + "&attempt=0&expandDagViz=true";
var container = svgContainer
.append("a")
.attr("xlink:href", stageLink)

View file

@ -20,7 +20,7 @@ package org.apache.spark.ui
import java.text.SimpleDateFormat
import java.util.{Locale, Date}
import scala.xml.{Node, Text}
import scala.xml.{Node, Text, Unparsed}
import org.apache.spark.Logging
import org.apache.spark.ui.scope.RDDOperationGraph
@ -371,4 +371,12 @@ private[spark] object UIUtils extends Logging {
</div>
</div>
}
/** Return a script element that automatically expands the DAG visualization on page load. */
def expandDagVizOnLoad(forJob: Boolean): Seq[Node] = {
<script type="text/javascript">
{Unparsed("$(document).ready(function() { toggleDagViz(" + forJob + ") });")}
</script>
}
}

View file

@ -44,6 +44,10 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
val parameterAttempt = request.getParameter("attempt")
require(parameterAttempt != null && parameterAttempt.nonEmpty, "Missing attempt parameter")
// If this is set, expand the dag visualization by default
val expandDagVizParam = request.getParameter("expandDagViz")
val expandDagViz = expandDagVizParam != null && expandDagVizParam.toBoolean
val stageId = parameterId.toInt
val stageAttemptId = parameterAttempt.toInt
val stageDataOption = progressListener.stageIdToData.get((stageId, stageAttemptId))
@ -174,6 +178,13 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
val dagViz = UIUtils.showDagVizForStage(
stageId, operationGraphListener.getOperationGraphForStage(stageId))
val maybeExpandDagViz: Seq[Node] =
if (expandDagViz) {
UIUtils.expandDagVizOnLoad(forJob = false)
} else {
Seq.empty
}
val accumulableHeaders: Seq[String] = Seq("Accumulable", "Value")
def accumulableRow(acc: AccumulableInfo): Elem =
<tr><td>{acc.name}</td><td>{acc.value}</td></tr>
@ -440,6 +451,7 @@ private[ui] class StagePage(parent: StagesTab) extends WebUIPage("stage") {
summary ++
showAdditionalMetrics ++
dagViz ++
maybeExpandDagViz ++
<h4>Summary Metrics for {numCompleted} Completed Tasks</h4> ++
<div>{summaryTable.getOrElse("No tasks have reported metrics yet.")}</div> ++
<h4>Aggregated Metrics by Executor</h4> ++ executorTable.toNodeSeq ++