Ext.define('PageAnalyzer.Summary', {
extend: 'Ext.panel.Panel',
requires: [
'Ext.chart.*',
'Ext.grid.Panel',
'Ext.grid.feature.Grouping',
'Ext.layout.container.Border',
'PageAnalyzer.models.LayoutTypeSummaryData',
'PageAnalyzer.models.LayoutIdSummaryData',
'Ext.tab.Panel'
],
layout: 'fit',
border: false,
toolTipTpl: [
'layout type: {type}
',
'total time: {duration}
',
'calls: {count}
',
'avg. time: {[Math.round((values.duration / values.count) * 100) / 100]}
',
'instances: {layoutCount}'
],
initComponent: function () {
var me = this;
me.typeDurationStore = Ext.create('Ext.data.Store', {
model: 'PageAnalyzer.models.LayoutTypeSummaryData',
sorters: { property: 'type', direction: 'DESC' }
});
me.items = [{
xtype: 'tabpanel',
deferredRender: false,
items:[
me.makeTypeTimeSummaryChart({}),
me.makeTypeCountSummaryChart({})
]
}];
me.callParent();
},
makeTypeTimeSummaryChart: function(cfg) {
var me = this,
toolTipTpl = me.getTpl('toolTipTpl');
return Ext.apply({
xtype: 'chart',
store: me.typeDurationStore,
itemId: 'durationsByTypeChart',
title: 'Time By Layout Type',
theme: 'Base:gradients',
hideMode: 'offsets',
axes: [{
type: 'Numeric',
title: 'Time (ms)',
position: 'left',
fields: ['duration'],
grid: true
},{
type: 'Category',
position: 'bottom',
fields: ['type'],
title: 'Layout Type',
label:{
'text-anchor': 'middle',
rotate: {
degrees: -35
},
translate: {
x: 10,
y: 0
}
}
}],
series: [{
type: 'column',
axis: 'left',
label: {
field: 'type',
font: '12px Arial'
},
tips: {
trackMouse: true,
tpl: toolTipTpl,
renderer: function(storeItem, item) {
this.update(storeItem.data);
}
},
xField: 'type',
yField: 'duration'
}]
}, cfg);
},
makeTypeCountSummaryChart: function(cfg) {
var me = this,
toolTipTpl = me.getTpl('toolTipTpl');
return Ext.apply({
xtype: 'chart',
store: me.typeDurationStore,
itemId: 'countsByTypeChart',
title: 'Calls by Layout Type',
theme: 'Base:gradients',
hideMode: 'offsets',
axes: [{
type: 'Numeric',
title: 'Total Calls',
position: 'left',
fields: ['count'],
grid: true
}, {
type: 'Category',
position: 'bottom',
fields: ['type'],
title: 'Layout Type',
label:{
'text-anchor': 'middle',
rotate: {
degrees: -35
},
translate: {
x: 10,
y: 0
}
}
}],
series: [{
type: 'column',
axis: 'left',
label: {
field: 'type',
font: '12px Arial'
},
tips: {
trackMouse: true,
tpl: toolTipTpl,
renderer: function(storeItem, item) {
this.update(storeItem.data);
}
},
xField: 'type',
yField: 'count'
}]
}, cfg);
},
loadTypeSummary: function (summary) {
var me = this,
data = [];
Ext.Object.each(summary, function (type, sum){
data.push({
type: type,
duration: sum.duration,
count: sum.count,
layoutCount: sum.layoutCount
});
});
me.typeDurationStore.removeAll();
me.typeDurationStore.loadData(data);
me.typeDurationStore.sort();
}
});