modules/performance-statistics-ext/report/js/sqlTab.js (176 lines of code) (raw):
/*
* 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.
*/
$('#sqlStatisticsTable').bootstrapTable({
pagination: true,
search: true,
columns: [{
field: 'text',
title: 'Query text',
sortable: true
}, {
field: 'count',
title: 'Executions',
sortable: true
}, {
field: 'duration',
title: 'Total duration, ms',
sortable: true
}, {
field: 'logicalReads',
title: 'Logical reads',
sortable: true
}, {
field: 'physicalReads',
title: 'Physical reads',
sortable: true
}, {
field: 'failures',
title: 'Failures count',
sortable: true
}],
data: prepareSqlTableData(),
detailViewIcon: true,
detailViewByClick: true,
detailView: true,
onExpandRow: function (index, row, $detail) {
buildExpandDetails(row, $detail)
},
sortName: 'duration',
sortOrder: 'desc'
});
function prepareSqlTableData() {
var data = [];
$.each(REPORT_DATA.sql, function (queryText, sqlData) {
data.push({
"text": queryText,
"count": sqlData["count"],
"duration": sqlData["duration"],
"logicalReads": sqlData["logicalReads"],
"physicalReads": sqlData["physicalReads"],
"failures": sqlData["failures"],
"properties": sqlData["properties"],
"rows": sqlData["rows"]
});
});
return data;
}
$('#topSlowSqlTable').bootstrapTable({
pagination: true,
search: true,
columns: [{
field: 'text',
title: 'Query text',
sortable: true
}, {
field: 'duration',
title: 'Duration, ms',
sortable: true,
sortOrder: 'desc'
}, {
field: 'startTime',
title: 'Start time',
sortable: true
}, {
field: 'nodeId',
title: 'Originating node id',
sortable: true
}, {
field: 'logicalReads',
title: 'Logical reads',
sortable: true
}, {
field: 'physicalReads',
title: 'Physical reads',
sortable: true
}, {
field: 'success',
title: 'Success',
sortable: true
}],
data: prepareSlowSqlTableData(),
detailViewIcon: true,
detailViewByClick: true,
detailView: true,
onExpandRow: function (index, row, $detail) {
buildExpandDetails(row, $detail)
},
sortName: 'duration',
sortOrder: 'desc'
});
function prepareSlowSqlTableData() {
var data = [];
$.each(REPORT_DATA.topSlowSql, function (key, sqlData) {
data.push({
text: sqlData["text"],
duration: sqlData["duration"],
startTime: new Date(sqlData["startTime"]),
nodeId: sqlData["nodeId"],
logicalReads: sqlData["logicalReads"],
physicalReads: sqlData["physicalReads"],
success: sqlData["success"],
properties: sqlData["properties"],
rows: sqlData["rows"]
});
});
return data;
}
/** Builds details on expand row. */
function buildExpandDetails(row, $detail) {
var hasProperties = row.hasOwnProperty("properties")
var hasRows = row.hasOwnProperty("rows")
var htmlProperties = hasProperties ? "<h5>Properties</h5><table class='properties'></table>" : ""
var htmlRows = hasRows ? "<h5>Rows</h5><table class='rows'></table>" : ""
var html = $detail.html(htmlProperties + (hasProperties & hasRows ? "<br/>" : "") + htmlRows)
if (hasProperties)
buildPropertiesSubTable(html.find('table.properties'), row.properties)
if (hasRows)
buildRowsSubTable(html.find('table.rows'), row.rows)
}
/** Builds query properties subtable. */
function buildPropertiesSubTable($el, properties) {
var data = [];
$.each(properties, function (k, prop) {
data.push({
name: prop["name"],
value: prop["value"],
count: prop["count"]
});
});
$el.bootstrapTable({
columns: [{
field: 'name',
title: 'Property name',
sortable: true
}, {
field: 'value',
title: 'Property value',
sortable: true
}, {
field: 'count',
title: 'Count',
sortable: true
}],
data: data,
sortName: 'name',
sortOrder: 'asc'
})
}
/** Builds query rows subtable. */
function buildRowsSubTable($el, rows) {
var data = [];
$.each(rows, function (k, row) {
data.push({
action: k,
rows: row
});
});
$el.bootstrapTable({
columns: [{
field: 'action',
title: 'Action',
sortable: true
}, {
field: 'rows',
title: 'Rows count',
sortable: true
}],
data: data,
sortName: 'action',
sortOrder: 'asc'
})
}