Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* 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.sql.execution.ui
import javax.servlet.http.HttpServletRequest
import scala.collection.mutable
import scala.xml.Node
import org.apache.commons.lang3.StringEscapeUtils
import org.apache.spark.internal.Logging
import org.apache.spark.ui.{UIUtils, WebUIPage}
private[ui] class AllExecutionsPage(parent: SQLTab) extends WebUIPage("") with Logging {
private val listener = parent.listener
override def render(request: HttpServletRequest): Seq[Node] = {
val currentTime = System.currentTimeMillis()
val content = listener.synchronized {
val _content = mutable.ListBuffer[Node]()
if (listener.getRunningExecutions.nonEmpty) {
_content ++=
new RunningExecutionTable(
parent, "Running Queries", currentTime,
listener.getRunningExecutions.sortBy(_.submissionTime).reverse).toNodeSeq
}
if (listener.getCompletedExecutions.nonEmpty) {
_content ++=
new CompletedExecutionTable(
parent, "Completed Queries", currentTime,
listener.getCompletedExecutions.sortBy(_.submissionTime).reverse).toNodeSeq
}
if (listener.getFailedExecutions.nonEmpty) {
_content ++=
new FailedExecutionTable(
parent, "Failed Queries", currentTime,
listener.getFailedExecutions.sortBy(_.submissionTime).reverse).toNodeSeq
}
_content
}
content ++=
UIUtils.headerSparkPage("SQL", content, parent, Some(5000))
}
}
private[ui] abstract class ExecutionTable(
parent: SQLTab,
tableId: String,
tableName: String,
currentTime: Long,
executionUIDatas: Seq[SQLExecutionUIData],
showRunningJobs: Boolean,
showSucceededJobs: Boolean,
showFailedJobs: Boolean) {
protected def baseHeader: Seq[String] = Seq(
"ID",
"Description",
"Submitted",
"Duration")
protected def header: Seq[String]
protected def row(currentTime: Long, executionUIData: SQLExecutionUIData): Seq[Node] = {
val submissionTime = executionUIData.submissionTime
val duration = executionUIData.completionTime.getOrElse(currentTime) - submissionTime
val runningJobs = executionUIData.runningJobs.map { jobId =>
{jobId.toString}
}
val succeededJobs = executionUIData.succeededJobs.sorted.map { jobId =>
{jobId.toString}
}
val failedJobs = executionUIData.failedJobs.sorted.map { jobId =>
{jobId.toString}
}
{executionUIData.executionId.toString}
{descriptionCell(executionUIData)}
{UIUtils.formatDate(submissionTime)}
{UIUtils.formatDuration(duration)}
{if (showRunningJobs) {
{runningJobs}
}}
{if (showSucceededJobs) {
{succeededJobs}
}}
{if (showFailedJobs) {
{failedJobs}
}}
}
private def descriptionCell(execution: SQLExecutionUIData): Seq[Node] = {
val details = if (execution.details.nonEmpty) {
+details
++