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.
*/
var shouldBlockUI = true;
$(document).ajaxStop(function () {
if (shouldBlockUI) {
$.unblockUI();
shouldBlockUI = false;
}
});
$(document).ajaxStart(function () {
if (shouldBlockUI) {
$.blockUI({message: '
Loading Stage Page...
'});
}
});
$.extend( $.fn.dataTable.ext.type.order, {
"duration-pre": ConvertDurationString,
"duration-asc": function ( a, b ) {
a = ConvertDurationString( a );
b = ConvertDurationString( b );
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"duration-desc": function ( a, b ) {
a = ConvertDurationString( a );
b = ConvertDurationString( b );
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
},
"size-pre": function (data) {
var floatValue = parseFloat(data)
return isNaN(floatValue) ? 0 : floatValue;
},
"size-asc": function (a, b) {
a = parseFloat(a);
b = parseFloat(b);
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"size-desc": function (a, b) {
a = parseFloat(a);
b = parseFloat(b);
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
} );
// This function will only parse the URL under certain format
// e.g. (history) https://domain:50509/history/application_1536254569791_3806251/1/stages/stage/?id=4&attempt=1
// e.g. (proxy) https://domain:50505/proxy/application_1502220952225_59143/stages/stage?id=4&attempt=1
function stageEndPoint(appId) {
var queryString = document.baseURI.split('?');
var words = document.baseURI.split('/');
var indexOfProxy = words.indexOf("proxy");
var stageId = queryString[1].split("&").filter(word => word.includes("id="))[0].split("=")[1];
if (indexOfProxy > 0) {
var appId = words[indexOfProxy + 1];
var newBaseURI = words.slice(0, words.indexOf("proxy") + 2).join('/');
return newBaseURI + "/api/v1/applications/" + appId + "/stages/" + stageId;
}
var indexOfHistory = words.indexOf("history");
if (indexOfHistory > 0) {
var appId = words[indexOfHistory + 1];
var appAttemptId = words[indexOfHistory + 2];
var newBaseURI = words.slice(0, words.indexOf("history")).join('/');
if (isNaN(appAttemptId) || appAttemptId == "0") {
return newBaseURI + "/api/v1/applications/" + appId + "/stages/" + stageId;
} else {
return newBaseURI + "/api/v1/applications/" + appId + "/" + appAttemptId + "/stages/" + stageId;
}
}
return uiRoot + "/api/v1/applications/" + appId + "/stages/" + stageId;
}
function getColumnNameForTaskMetricSummary(columnKey) {
switch(columnKey) {
case "executorRunTime":
return "Duration";
case "jvmGcTime":
return "GC Time";
case "gettingResultTime":
return "Getting Result Time";
case "inputMetrics":
return "Input Size / Records";
case "outputMetrics":
return "Output Size / Records";
case "peakExecutionMemory":
return "Peak Execution Memory";
case "resultSerializationTime":
return "Result Serialization Time";
case "schedulerDelay":
return "Scheduler Delay";
case "diskBytesSpilled":
return "Spill (disk)";
case "memoryBytesSpilled":
return "Spill (memory)";
case "shuffleReadMetrics":
return "Shuffle Read Size / Records";
case "shuffleWriteMetrics":
return "Shuffle Write Size / Records";
case "executorDeserializeTime":
return "Task Deserialization Time";
case "shuffleReadBlockedTime":
return "Shuffle Read Blocked Time";
case "shuffleRemoteReads":
return "Shuffle Remote Reads";
case "shuffleWriteTime":
return "Shuffle Write Time";
default:
return "NA";
}
}
function displayRowsForSummaryMetricsTable(row, type, columnIndex) {
switch(row.columnKey) {
case 'inputMetrics':
var str = formatBytes(row.data.bytesRead[columnIndex], type) + " / " +
row.data.recordsRead[columnIndex];
return str;
case 'outputMetrics':
var str = formatBytes(row.data.bytesWritten[columnIndex], type) + " / " +
row.data.recordsWritten[columnIndex];
return str;
case 'shuffleReadMetrics':
var str = formatBytes(row.data.readBytes[columnIndex], type) + " / " +
row.data.readRecords[columnIndex];
return str;
case 'shuffleReadBlockedTime':
var str = formatDuration(row.data.fetchWaitTime[columnIndex]);
return str;
case 'shuffleRemoteReads':
var str = formatBytes(row.data.remoteBytesRead[columnIndex], type);
return str;
case 'shuffleWriteMetrics':
var str = formatBytes(row.data.writeBytes[columnIndex], type) + " / " +
row.data.writeRecords[columnIndex];
return str;
case 'shuffleWriteTime':
var str = formatDuration(row.data.writeTime[columnIndex] / 1000000.0);
return str;
default:
return (row.columnKey == 'peakExecutionMemory' || row.columnKey == 'memoryBytesSpilled'
|| row.columnKey == 'diskBytesSpilled') ? formatBytes(
row.data[columnIndex], type) : (formatDuration(row.data[columnIndex]));
}
}
function createDataTableForTaskSummaryMetricsTable(taskSummaryMetricsTable) {
var taskMetricsTable = "#summary-metrics-table";
if ($.fn.dataTable.isDataTable(taskMetricsTable)) {
taskSummaryMetricsDataTable.clear().draw();
taskSummaryMetricsDataTable.rows.add(taskSummaryMetricsTable).draw();
} else {
var taskConf = {
"data": taskSummaryMetricsTable,
"columns": [
{data : 'metric'},
// Min
{
data: function (row, type) {
return displayRowsForSummaryMetricsTable(row, type, 0);
}
},
// 25th percentile
{
data: function (row, type) {
return displayRowsForSummaryMetricsTable(row, type, 1);
}
},
// Median
{
data: function (row, type) {
return displayRowsForSummaryMetricsTable(row, type, 2);
}
},
// 75th percentile
{
data: function (row, type) {
return displayRowsForSummaryMetricsTable(row, type, 3);
}
},
// Max
{
data: function (row, type) {
return displayRowsForSummaryMetricsTable(row, type, 4);
}
}
],
"columnDefs": [
{ "type": "duration", "targets": 1 },
{ "type": "duration", "targets": 2 },
{ "type": "duration", "targets": 3 },
{ "type": "duration", "targets": 4 },
{ "type": "duration", "targets": 5 }
],
"paging": false,
"searching": false,
"order": [[0, "asc"]],
"bSort": false,
"bAutoWidth": false,
"oLanguage": {
"sEmptyTable": "No tasks have reported metrics yet"
}
};
taskSummaryMetricsDataTable = $(taskMetricsTable).DataTable(taskConf);
}
taskSummaryMetricsTableCurrentStateArray = taskSummaryMetricsTable.slice();
}
function createRowMetadataForColumn(colKey, data, checkboxId) {
var row = {
"metric": getColumnNameForTaskMetricSummary(colKey),
"data": data,
"checkboxId": checkboxId,
"columnKey": colKey
};
return row;
}
function reselectCheckboxesBasedOnTaskTableState() {
var taskSummaryHasSelected = false;
var executorSummaryHasSelected = false;
var allTaskSummaryChecked = true;
var allExecutorSummaryChecked = true;
var taskSummaryMetricsTableCurrentFilteredArray = taskSummaryMetricsTableCurrentStateArray.slice();
if (typeof taskTableSelector !== 'undefined' && taskSummaryMetricsTableCurrentStateArray.length > 0) {
for (var k = 0; k < optionalColumns.length; k++) {
if (taskTableSelector.column(optionalColumns[k]).visible()) {
taskSummaryHasSelected = true;
$("#box-"+optionalColumns[k]).prop('checked', true);
taskSummaryMetricsTableCurrentStateArray.push(taskSummaryMetricsTableArray.filter(row => (row.checkboxId).toString() == optionalColumns[k])[0]);
taskSummaryMetricsTableCurrentFilteredArray = taskSummaryMetricsTableCurrentStateArray.slice();
} else {
allTaskSummaryChecked = false;
}
}
createDataTableForTaskSummaryMetricsTable(taskSummaryMetricsTableCurrentFilteredArray);
}
if (typeof executorSummaryTableSelector !== 'undefined') {
for (var k = 0; k < executorOptionalColumns.length; k++) {
if (executorSummaryTableSelector.column(executorOptionalColumns[k]).visible()) {
executorSummaryHasSelected = true;
$("#executor-box-"+executorOptionalColumns[k]).prop('checked', true);
} else {
allExecutorSummaryChecked = false;
}
}
}
if ((taskSummaryHasSelected || executorSummaryHasSelected) && allTaskSummaryChecked && allExecutorSummaryChecked) {
$("#box-0").prop('checked', true);
}
}
function getStageAttemptId() {
var words = document.baseURI.split('?');
var digitsRegex = /[0-9]+/;
// We are using regex here to extract the stage attempt id as there might be certain url's with format
// like /proxy/application_1539986433979_27115/stages/stage/?id=0&attempt=0#tasksTitle
var stgAttemptId = words[1].split("&").filter(
word => word.includes("attempt="))[0].split("=")[1].match(digitsRegex);
return stgAttemptId;
}
var taskSummaryMetricsTableArray = [];
var taskSummaryMetricsTableCurrentStateArray = [];
var taskSummaryMetricsDataTable;
var optionalColumns = [11, 12, 13, 14, 15, 16, 17, 21];
var taskTableSelector;
var executorOptionalColumns = [15, 16, 17, 18];
var executorSummaryTableSelector;
$(document).ready(function () {
setDataTableDefaults();
$("#showAdditionalMetrics").append(
"