org.apache.spark.deploy.history.HistoryPage.scala Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.spark.deploy.history
import javax.servlet.http.HttpServletRequest
import scala.xml.Node
import org.apache.spark.status.api.v1.ApplicationInfo
import org.apache.spark.ui.{UIUtils, WebUIPage}
private[history] class HistoryPage(parent: HistoryServer) extends WebUIPage("") {
def render(request: HttpServletRequest): Seq[Node] = {
// stripXSS is called first to remove suspicious characters used in XSS attacks
val requestedIncomplete =
Option(UIUtils.stripXSS(request.getParameter("showIncomplete"))).getOrElse("false").toBoolean
val allAppsSize = parent.getApplicationList()
.count(isApplicationCompleted(_) != requestedIncomplete)
val eventLogsUnderProcessCount = parent.getEventLogsUnderProcess()
val lastUpdatedTime = parent.getLastUpdatedTime()
val providerConfig = parent.getProviderConfig()
val content =
++
{providerConfig.map { case (k, v) => - {k}: {v}
}}
{
if (eventLogsUnderProcessCount > 0) {
There are {eventLogsUnderProcessCount} event log(s) currently being
processed which may result in additional applications getting listed on this page.
Refresh the page to view updates.
}
}
{
if (lastUpdatedTime > 0) {
Last updated: {lastUpdatedTime}
}
}
{
Client local time zone:
}
{
if (allAppsSize > 0) {
++
++
++
} else if (requestedIncomplete) {
No incomplete applications found!
} else if (eventLogsUnderProcessCount > 0) {
No completed applications found!
} else {
No completed applications found!
++ parent.emptyListingHtml
}
}
{
if (requestedIncomplete) {
"Back to completed applications"
} else {
"Show incomplete applications"
}
}
UIUtils.basicSparkPage(request, content, "History Server", true)
}
private def makePageLink(request: HttpServletRequest, showIncomplete: Boolean): String = {
UIUtils.prependBaseUri(request, "/?" + "showIncomplete=" + showIncomplete)
}
private def isApplicationCompleted(appInfo: ApplicationInfo): Boolean = {
appInfo.attempts.nonEmpty && appInfo.attempts.head.completed
}
}