Package org.apache.spark.ui
Class UIUtils
Object
org.apache.spark.ui.UIUtils
Utility functions for generating XML pages with spark content.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic StringactionFormMethod(boolean actionsViaGetEnabled) The method for the forms behind the UI's state-changing buttons (job and stage kill).static scala.collection.immutable.Seq<scala.xml.Node>basicSparkPage(jakarta.servlet.http.HttpServletRequest request, scala.Function0<scala.collection.immutable.Seq<scala.xml.Node>> content, String title, boolean useDataTables) Returns a page with the spark css/js and a simple format.static jakarta.ws.rs.core.ResponsebuildErrorResponse(jakarta.ws.rs.core.Response.Status status, String msg) static scala.collection.immutable.Seq<scala.xml.Node>commonHeaderNodes(jakarta.servlet.http.HttpServletRequest request) static scala.collection.immutable.Seq<scala.xml.Node>dataTablesHeaderNodes(jakarta.servlet.http.HttpServletRequest request) static org.glassfish.jersey.internal.util.collection.MultivaluedStringMapdecodeURLParameter(jakarta.ws.rs.core.MultivaluedMap<String, String> params) Decode URLParameter if URL is encoded by YARN-WebAppProxyServlet.static StringdecodeURLParameter(String urlParam) Decode URLParameter if URL is encoded by YARN-WebAppProxyServlet.static scala.collection.immutable.Seq<scala.xml.Node>detailsUINode(boolean isMultiline, String message) durationDataPadding(scala.Tuple2<Object, Map<String, Long>>[] values) There may be different duration labels in each batch.static StringencodeLogParam(String value) URL-encode a single request-supplied value before embedding it in a log page query string.static scala.collection.immutable.Seq<scala.xml.Node>errorMessageCell(String errorMessage) errorSummary(String errorMessage) This function works exactly the same as utils.errorSummary(javascript), it shall bestatic StringformatBatchTime(long batchTime, long batchInterval, boolean showYYYYMMSS, TimeZone timezone) IfbatchIntervalis less than 1 second, formatbatchTimewith milliseconds.static StringformatDate(long timestamp) static StringformatDate(Date date) static StringformatDuration(long milliseconds) static StringformatDurationVerbose(long ms) Generate a verbose human-readable string representing a duration such as "5 second 35 ms"static StringformatImportJavaScript(jakarta.servlet.http.HttpServletRequest request, String sourceFile, scala.collection.immutable.Seq<String> methods) static StringformatNumber(double records) Generate a human-readable string representing a number (e.g.static intstatic scala.collection.immutable.Seq<scala.xml.Node>headerSparkPage(jakarta.servlet.http.HttpServletRequest request, String title, scala.Function0<scala.collection.immutable.Seq<scala.xml.Node>> content, org.apache.spark.ui.SparkUITab activeTab, scala.Option<String> helpText, boolean showVisualization, boolean useDataTables) Returns a spark page with correctly formatted headersstatic <T> scala.collection.immutable.Seq<scala.xml.Node>listingTable(scala.collection.immutable.Seq<String> headers, scala.Function1<T, scala.collection.immutable.Seq<scala.xml.Node>> generateDataRow, scala.collection.Iterable<T> data, boolean fixedWidth, scala.Option<String> id, scala.collection.immutable.Seq<String> headerClasses, boolean stripeRowsWithCss, boolean sortable, scala.collection.immutable.Seq<scala.Option<String>> tooltipHeaders) Returns an HTML table constructed by generating a row for each object in a sequence.static StringlogPageOnloadScript(String logParams, long curLogLength, long startByte, long endByte, long logLength, long byteLength) Build the inlinewindow.onload = initLogPage(...)bootstrap script shared by the log pages (history / master / worker / driver).static org.apache.spark.internal.Logging.LogStringContextLogStringContext(scala.StringContext sc) static scala.xml.NodeSeqmakeDescription(String desc, String basePathUri, boolean plainText) Returns HTML rendering of a job or stage description.static StringReturn the correct Href after checking if master is running in the reverse proxy mode or not.static scala.collection.immutable.Seq<scala.xml.Node>makeProgressBar(int started, int completed, int failed, int skipped, scala.collection.immutable.Map<String, Object> reasonToNumKilled, int total) static org.slf4j.Loggerstatic voidorg$apache$spark$internal$Logging$$log__$eq(org.slf4j.Logger x$1) static StringprependBaseUri(jakarta.servlet.http.HttpServletRequest request, String basePath, String resource) static scala.collection.Seq<scala.xml.Node>showDagVizForJob(int jobId, scala.collection.Seq<org.apache.spark.ui.scope.RDDOperationGraph> graphs) Return a "DAG visualization" DOM element that expands into a visualization for a job.static scala.collection.immutable.Seq<scala.xml.Node>showDagVizForStage(int stageId, scala.Option<org.apache.spark.ui.scope.RDDOperationGraph> graph) Return a "DAG visualization" DOM element that expands into a visualization for a stage.static Stringstatic Stringstatic Stringstatic scala.collection.immutable.Seq<scala.xml.Node>static StringuiRoot(jakarta.servlet.http.HttpServletRequest request) static scala.collection.immutable.Seq<scala.xml.Node>vizHeaderNodes(jakarta.servlet.http.HttpServletRequest request)
-
Constructor Details
-
UIUtils
public UIUtils()
-
-
Method Details
-
TABLE_CLASS_NOT_STRIPED
-
TABLE_CLASS_STRIPED
-
TABLE_CLASS_STRIPED_SORTABLE
-
formatDate
-
formatDate
-
formatDuration
-
formatDurationVerbose
Generate a verbose human-readable string representing a duration such as "5 second 35 ms" -
formatBatchTime
public static String formatBatchTime(long batchTime, long batchInterval, boolean showYYYYMMSS, TimeZone timezone) IfbatchIntervalis less than 1 second, formatbatchTimewith milliseconds. Otherwise, formatbatchTimewithout milliseconds.- Parameters:
batchTime- the batch time to be formattedbatchInterval- the batch intervalshowYYYYMMSS- if showing theyyyy/MM/ddpart. If it's false, the return value will be onlyHH:mm:ssorHH:mm:ss.SSSdepending onbatchIntervaltimezone- only for test- Returns:
- (undocumented)
-
formatNumber
Generate a human-readable string representing a number (e.g. 100 K) -
uiRoot
-
prependBaseUri
-
commonHeaderNodes
public static scala.collection.immutable.Seq<scala.xml.Node> commonHeaderNodes(jakarta.servlet.http.HttpServletRequest request) -
vizHeaderNodes
public static scala.collection.immutable.Seq<scala.xml.Node> vizHeaderNodes(jakarta.servlet.http.HttpServletRequest request) -
dataTablesHeaderNodes
public static scala.collection.immutable.Seq<scala.xml.Node> dataTablesHeaderNodes(jakarta.servlet.http.HttpServletRequest request) -
headerSparkPage
public static scala.collection.immutable.Seq<scala.xml.Node> headerSparkPage(jakarta.servlet.http.HttpServletRequest request, String title, scala.Function0<scala.collection.immutable.Seq<scala.xml.Node>> content, org.apache.spark.ui.SparkUITab activeTab, scala.Option<String> helpText, boolean showVisualization, boolean useDataTables) Returns a spark page with correctly formatted headers -
basicSparkPage
public static scala.collection.immutable.Seq<scala.xml.Node> basicSparkPage(jakarta.servlet.http.HttpServletRequest request, scala.Function0<scala.collection.immutable.Seq<scala.xml.Node>> content, String title, boolean useDataTables) Returns a page with the spark css/js and a simple format. Used for scheduler UI. -
listingTable
public static <T> scala.collection.immutable.Seq<scala.xml.Node> listingTable(scala.collection.immutable.Seq<String> headers, scala.Function1<T, scala.collection.immutable.Seq<scala.xml.Node>> generateDataRow, scala.collection.Iterable<T> data, boolean fixedWidth, scala.Option<String> id, scala.collection.immutable.Seq<String> headerClasses, boolean stripeRowsWithCss, boolean sortable, scala.collection.immutable.Seq<scala.Option<String>> tooltipHeaders) Returns an HTML table constructed by generating a row for each object in a sequence. -
makeProgressBar
-
showDagVizForStage
public static scala.collection.immutable.Seq<scala.xml.Node> showDagVizForStage(int stageId, scala.Option<org.apache.spark.ui.scope.RDDOperationGraph> graph) Return a "DAG visualization" DOM element that expands into a visualization for a stage. -
showDagVizForJob
public static scala.collection.Seq<scala.xml.Node> showDagVizForJob(int jobId, scala.collection.Seq<org.apache.spark.ui.scope.RDDOperationGraph> graphs) Return a "DAG visualization" DOM element that expands into a visualization for a job. -
tooltip
-
actionFormMethod
The method for the forms behind the UI's state-changing buttons (job and stage kill). Those are always forms, carrying the per-UI CSRF token and the target id as hidden fields; only the method follows spark.ui.actionsViaGetEnabled. Submitted with GET, the browser turns the fields into the query string, the same request a plain link would make, which also works through proxies that do not forward POST, such as the YARN ResourceManager/AM proxy (SPARK-6846). SparkUI.initialize accepts GET on the endpoints under the same flag, so the form and the endpoint always agree, and the inline onclick handler prompts for confirmation before the submit either way.- Parameters:
actionsViaGetEnabled- (undocumented)- Returns:
- (undocumented)
-
makeDescription
Returns HTML rendering of a job or stage description. It will try to parse the string as HTML and make sure that it only contains anchors with root-relative links. Otherwise, the whole string will rendered as a simple escaped text.Note: In terms of security, only anchor tags with root relative links are supported. So any attempts to embed links outside Spark UI, other tags like <script>, or inline scripts like
onclickwill cause in the whole description to be treated as plain text.- Parameters:
desc- the original job or stage description string, which may contain html tags.basePathUri- with which to prepend the relative links; this is used when plainText is false.plainText- whether to keep only plain text (i.e. remove html tags) from the original description string.- Returns:
- the HTML rendering of the job or stage description, which will be a Text when plainText is true, and an Elem otherwise.
-
decodeURLParameter
Decode URLParameter if URL is encoded by YARN-WebAppProxyServlet. Due to YARN-2844: WebAppProxyServlet cannot handle urls which contain encoded characters Therefore we need to decode it until we get the real URLParameter.- Parameters:
urlParam- (undocumented)- Returns:
- (undocumented)
-
decodeURLParameter
public static org.glassfish.jersey.internal.util.collection.MultivaluedStringMap decodeURLParameter(jakarta.ws.rs.core.MultivaluedMap<String, String> params) Decode URLParameter if URL is encoded by YARN-WebAppProxyServlet.- Parameters:
params- (undocumented)- Returns:
- (undocumented)
-
getTimeZoneOffset
public static int getTimeZoneOffset() -
encodeLogParam
URL-encode a single request-supplied value before embedding it in a log page query string. This keeps characters such as '&', '=', '#' and whitespace from changing the structure of the subsequent/logrequests (parameter injection / query truncation).- Parameters:
value- (undocumented)- Returns:
- (undocumented)
-
logPageOnloadScript
public static String logPageOnloadScript(String logParams, long curLogLength, long startByte, long endByte, long logLength, long byteLength) Build the inlinewindow.onload = initLogPage(...)bootstrap script shared by the log pages (history / master / worker / driver). Individual parameter values inlogParamsmust already be URL-encoded viaencodeLogParam(java.lang.String)so the query string is unambiguous; the assembled string is additionally escaped for the surrounding JavaScript string literal so request-supplied values cannot break out of the inline <script> block.- Parameters:
logParams- (undocumented)curLogLength- (undocumented)startByte- (undocumented)endByte- (undocumented)logLength- (undocumented)byteLength- (undocumented)- Returns:
- (undocumented)
-
makeHref
Return the correct Href after checking if master is running in the reverse proxy mode or not.- Parameters:
proxy- (undocumented)id- (undocumented)origHref- (undocumented)- Returns:
- (undocumented)
-
buildErrorResponse
public static jakarta.ws.rs.core.Response buildErrorResponse(jakarta.ws.rs.core.Response.Status status, String msg) -
durationDataPadding
public static scala.Tuple2<Object,scala.collection.immutable.Map<String, durationDataPaddingObject>>[] (scala.Tuple2<Object, Map<String, Long>>[] values) There may be different duration labels in each batch. So we need to mark those missing duration label as '0d' to avoid UI rending error.- Parameters:
values- (undocumented)- Returns:
- (undocumented)
-
detailsUINode
public static scala.collection.immutable.Seq<scala.xml.Node> detailsUINode(boolean isMultiline, String message) -
errorSummary
This function works exactly the same as utils.errorSummary(javascript), it shall be- Parameters:
errorMessage- (undocumented)- Returns:
- (undocumented) remained the same whichever changed
-
errorMessageCell
-
formatImportJavaScript
-
org$apache$spark$internal$Logging$$log_
public static org.slf4j.Logger org$apache$spark$internal$Logging$$log_() -
org$apache$spark$internal$Logging$$log__$eq
public static void org$apache$spark$internal$Logging$$log__$eq(org.slf4j.Logger x$1) -
LogStringContext
public static org.apache.spark.internal.Logging.LogStringContext LogStringContext(scala.StringContext sc)
-