aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorChristian Kadner <ckadner@us.ibm.com>2015-11-01 13:09:42 -0800
committerMarcelo Vanzin <vanzin@cloudera.com>2015-11-01 13:09:42 -0800
commitdc7e399fc01e74f2ba28ebd945785cc0f7759ccd (patch)
tree2f1cdfa5f56fdb8d6e5c22a39ab51e30976b3d0a /core
parent643c49c75ee95243fd19ae73b5170e6e6e212b8d (diff)
downloadspark-dc7e399fc01e74f2ba28ebd945785cc0f7759ccd.tar.gz
spark-dc7e399fc01e74f2ba28ebd945785cc0f7759ccd.tar.bz2
spark-dc7e399fc01e74f2ba28ebd945785cc0f7759ccd.zip
[SPARK-11338] [WEBUI] Prepend app links on HistoryPage with uiRoot path
[SPARK-11338: HistoryPage not multi-tenancy enabled ...](https://issues.apache.org/jira/browse/SPARK-11338) - `HistoryPage.scala` ...prepending all page links with the web proxy (`uiRoot`) path - `HistoryServerSuite.scala` ...adding a test case to verify all site-relative links are prefixed when the environment variable `APPLICATION_WEB_PROXY_BASE` (or System property `spark.ui.proxyBase`) is set Author: Christian Kadner <ckadner@us.ibm.com> Closes #9291 from ckadner/SPARK-11338 and squashes the following commits: 01d2f35 [Christian Kadner] [SPARK-11338][WebUI] nit fixes d054bd7 [Christian Kadner] [SPARK-11338][WebUI] prependBaseUri in method makePageLink 8bcb3dc [Christian Kadner] [SPARK-11338][WebUI] Prepend application links on HistoryPage with uiRoot path
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/org/apache/spark/deploy/history/HistoryPage.scala9
-rw-r--r--core/src/test/scala/org/apache/spark/deploy/history/HistoryServerSuite.scala21
2 files changed, 23 insertions, 7 deletions
diff --git a/core/src/main/scala/org/apache/spark/deploy/history/HistoryPage.scala b/core/src/main/scala/org/apache/spark/deploy/history/HistoryPage.scala
index b347cb3be6..642d71b18c 100644
--- a/core/src/main/scala/org/apache/spark/deploy/history/HistoryPage.scala
+++ b/core/src/main/scala/org/apache/spark/deploy/history/HistoryPage.scala
@@ -161,7 +161,7 @@ private[history] class HistoryPage(parent: HistoryServer) extends WebUIPage("")
info: ApplicationHistoryInfo,
attempt: ApplicationAttemptInfo,
isFirst: Boolean): Seq[Node] = {
- val uiAddress = HistoryServer.getAttemptURI(info.id, attempt.attemptId)
+ val uiAddress = UIUtils.prependBaseUri(HistoryServer.getAttemptURI(info.id, attempt.attemptId))
val startTime = UIUtils.formatDate(attempt.startTime)
val endTime = if (attempt.endTime > 0) UIUtils.formatDate(attempt.endTime) else "-"
val duration =
@@ -190,8 +190,7 @@ private[history] class HistoryPage(parent: HistoryServer) extends WebUIPage("")
{
if (renderAttemptIdColumn) {
if (info.attempts.size > 1 && attempt.attemptId.isDefined) {
- <td><a href={HistoryServer.getAttemptURI(info.id, attempt.attemptId)}>
- {attempt.attemptId.get}</a></td>
+ <td><a href={uiAddress}>{attempt.attemptId.get}</a></td>
} else {
<td>&nbsp;</td>
}
@@ -218,9 +217,9 @@ private[history] class HistoryPage(parent: HistoryServer) extends WebUIPage("")
}
private def makePageLink(linkPage: Int, showIncomplete: Boolean): String = {
- "/?" + Array(
+ UIUtils.prependBaseUri("/?" + Array(
"page=" + linkPage,
"showIncomplete=" + showIncomplete
- ).mkString("&")
+ ).mkString("&"))
}
}
diff --git a/core/src/test/scala/org/apache/spark/deploy/history/HistoryServerSuite.scala b/core/src/test/scala/org/apache/spark/deploy/history/HistoryServerSuite.scala
index e5b5e1bb65..4b7fd4f13b 100644
--- a/core/src/test/scala/org/apache/spark/deploy/history/HistoryServerSuite.scala
+++ b/core/src/test/scala/org/apache/spark/deploy/history/HistoryServerSuite.scala
@@ -29,7 +29,7 @@ import org.scalatest.{BeforeAndAfter, Matchers}
import org.scalatest.mock.MockitoSugar
import org.apache.spark.{JsonTestUtils, SecurityManager, SparkConf, SparkFunSuite}
-import org.apache.spark.ui.SparkUI
+import org.apache.spark.ui.{SparkUI, UIUtils}
/**
* A collection of tests against the historyserver, including comparing responses from the json
@@ -261,7 +261,24 @@ class HistoryServerSuite extends SparkFunSuite with BeforeAndAfter with Matchers
l <- links
attrs <- l.attribute("href")
} yield (attrs.toString)
- justHrefs should contain(link)
+ justHrefs should contain (UIUtils.prependBaseUri(resource = link))
+ }
+
+ test("relative links are prefixed with uiRoot (spark.ui.proxyBase)") {
+ val proxyBaseBeforeTest = System.getProperty("spark.ui.proxyBase")
+ val uiRoot = Option(System.getenv("APPLICATION_WEB_PROXY_BASE")).getOrElse("/testwebproxybase")
+ val page = new HistoryPage(server)
+ val request = mock[HttpServletRequest]
+
+ // when
+ System.setProperty("spark.ui.proxyBase", uiRoot)
+ val response = page.render(request)
+ System.setProperty("spark.ui.proxyBase", Option(proxyBaseBeforeTest).getOrElse(""))
+
+ // then
+ val urls = response \\ "@href" map (_.toString)
+ val siteRelativeLinks = urls filter (_.startsWith("/"))
+ all (siteRelativeLinks) should startWith (uiRoot)
}
def getContentAndCode(path: String, port: Int = port): (Int, Option[String], Option[String]) = {