Skip to content

Commit

Permalink
Closed-Bug:#1581650
Browse files Browse the repository at this point in the history
1)Replaced the database reads stack bar chart with analytics database usage in analytics summary page
2)Fixed the issue last bar is hidden in all summary page stack charts.

Unit test results
----------------
Web Controller
-------------
PhantomJS 1.9.8 (Mac OS X 0.0.0): Executed 376 of 376 SUCCESS (3 mins 19.735 secs / 3 mins 7.889 secs)

Change-Id: I6df650b41955a0e3fa01a140b10662edca0be9d1
  • Loading branch information
vishnuvv committed Aug 3, 2016
1 parent 3070e3f commit b0acbf6
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 48 deletions.
1 change: 1 addition & 0 deletions webroot/common/ui/js/controller.app.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ function getControllerAppPaths (ctBaseDir, ctBuildDir,env) {
'monitor-infra-analytics-sandesh-chart-model': ctWebDir + '/monitor/infrastructure/analyticsnode/ui/js/models/AnalyticsNodeSandeshChartModel',
'monitor-infra-analytics-queries-chart-model': ctWebDir + '/monitor/infrastructure/analyticsnode/ui/js/models/AnalyticsNodeQueriesModel',
'monitor-infra-analytics-database-read-write-chart-model': ctWebDir + '/monitor/infrastructure/analyticsnode/ui/js/models/AnalyticsNodeDatabaseWriteReadModel',
'monitor-infra-analytics-database-usage-model': ctWebDir + '/monitor/infrastructure/common/ui/js/models/DatabaseUsageModel',
'monitor-infra-analyticsnode-model' : ctWebDir + '/monitor/infrastructure/common/ui/js/models/AnalyticsNodeListModel',
'monitor-infra-databasenode-model' : ctWebDir + '/monitor/infrastructure/common/ui/js/models/DatabaseNodeListModel',
'monitor-infra-controlnode-model' : ctWebDir + '/monitor/infrastructure/common/ui/js/models/ControlNodeListModel',
Expand Down
1 change: 1 addition & 0 deletions webroot/common/ui/js/controller.labels.js
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,7 @@ define([
this.ANALYTICS_CHART_DATABASE_READ_STACKEDBARCHART_ID = "analytics-chart-database-read-stackedbarchart-id";
this.ANALYTICS_CHART_DATABASE_READ_LABEL = "DB Reads";
this.ANALYTICS_CHART_FAILED_DATABASE_READS = "Failed DB Reads";
this.ANALYTICS_CHART_DATABASE_USAGE = "DB Usage";
this.ANALYTICS_CHART_DATABASE_WRITE_SECTION_ID = "analytics-chart-database-write-section-id";
this.ANALYTICS_CHART_DATABASE_WRITE_STACKEDBARCHART_ID = "analytics-chart-database-write-stackedbarchart-id";
this.ANALYTICS_CHART_DATABASE_WRITE_LABEL = "DB Writes";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ define([
}
},
cacheConfig : {
ucid: ctwl.CACHE_CONFIGNODE_CHARTS

}
};
var listModel = new ContrailListModel(listModelConfig)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* Copyright (c) 2015 Juniper Networks, Inc. All rights reserved.
*/

define([
'contrail-list-model'
], function (ContrailListModel) {
var DatabaseUsageModel = function () {
var queryPostData = {
"autoSort": true,
"async": false,
"formModelAttrs": {
"table_name": "StatTable.DatabaseUsageInfo.database_usage",
"table_type": "STAT",
"query_prefix": "stat",
"time_range": "3600",
"from_time": Date.now() - (2 * 60 * 60 * 1000),
"from_time_utc": Date.now() - (2 * 60 * 60 * 1000),
"to_time": Date.now(),
"to_time_utc": Date.now(),
"select": "Source, T, MAX(database_usage.analytics_db_size_1k)",
"time_granularity_unit": "secs",
"limit": "150000"
},
};
var listModelConfig = {
remote : {
ajaxConfig : {
url : "/api/qe/query",
type: 'POST',
data: JSON.stringify(queryPostData)
},
dataParser : function (response) {
var stats = getValueByJsonPath(response, 'data', []);
$.each(stats, function(idx, obj) {
obj['MAX(database_usage.analytics_db_size_1k)'] =
ifNull(obj['MAX(database_usage.analytics_db_size_1k)'],0) * 1024; //Converting KB to Bytes
});
listModel.queryJSON = response['queryJSON'];
return stats;
}
},
cacheConfig : {

}
};
var listModel = new ContrailListModel(listModelConfig)
return listModel;
};
return DatabaseUsageModel;
}
);
Original file line number Diff line number Diff line change
Expand Up @@ -791,6 +791,45 @@ define(
return parsedData;
};

self.parseDatabaseUsageData = function (dbstats, chartViewModel, key) {
var cf = crossfilter(dbstats);
var parsedData = [];
var timeStampField = 'T';
var groupDim = cf.dimension(function(d) { return d["Source"];});
var tsDim = cf.dimension(function(d) { return d[timeStampField];});
var buckets = this.bucketizeConfigNodeStats(dbstats, null, null, chartViewModel.queryJSON);
var colorCodes = monitorInfraUtils.getMonitorInfraNodeColors(1);
//Now parse this data to be usable in the chart
var parsedData = [];
for(var i in buckets) {
var y0 = 0, counts = [], totalFailedReqs = 0;
var timestampExtent = buckets[i]['timestampExtent'];
tsDim.filter(timestampExtent);
var bucketdbstatsArr = tsDim.top(Infinity);
var fromTime = new XDate((timestampExtent[0]/1000)).toString('HH:mm');
var maxDBUsageObj = _.max(bucketdbstatsArr, function (d) {
return ifNull(d[key], 0);
});
var maxDBUsage = ifNull(maxDBUsageObj[key], 0);
counts.push({
name: ctwl.ANALYTICS_CHART_DATABASE_USAGE,
color: colorCodes[0],
perNodeDBUsage: maxDBUsage,
time: contrail.format('{0}', fromTime),
y0:y0,
y1:y0 += maxDBUsage
});
parsedData.push({
colorCodes: colorCodes,
counts: counts,
total: maxDBUsage,
timestampExtent: timestampExtent,
date: new Date(i / 1000)
});
}
return parsedData;
};

this.parseAnlyticsQueriesChartData = function (apiStats, chartViewModel) {
var cf =crossfilter(apiStats);
var parsedData = [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,13 @@
*/

define(['underscore', 'contrail-view',
'monitor-infra-analytics-sandesh-chart-model', 'monitor-infra-analytics-queries-chart-model', 'monitor-infra-analytics-database-read-write-chart-model'],function(_, ContrailView,AnalyticsNodeSandeshChartModel, AnalyticsNodeQueriesChartModel, AnalyticsNodeDataBaseReadWriteChartModel){
'monitor-infra-analytics-sandesh-chart-model',
'monitor-infra-analytics-queries-chart-model',
'monitor-infra-analytics-database-read-write-chart-model',
'monitor-infra-analytics-database-usage-model'],
function(_, ContrailView,AnalyticsNodeSandeshChartModel,
AnalyticsNodeQueriesChartModel, AnalyticsNodeDataBaseReadWriteChartModel,
AanlyticsNodeDatabaseUsageModel){
var AnalyticsNodesSummaryChartsView = ContrailView.extend({
render : function (){
var anlyticsTemplate = contrail.getTemplate4Id(
Expand All @@ -24,6 +30,7 @@ define(['underscore', 'contrail-view',
bottomrightCoulmn = self.$el.find(".bottom-container .right-column"),
sandeshModel = new AnalyticsNodeSandeshChartModel(),
queriesModel = new AnalyticsNodeQueriesChartModel(),
dbUsageModel = new AanlyticsNodeDatabaseUsageModel();
databseReadWritemodel = new AnalyticsNodeDataBaseReadWriteChartModel();
var colorMap = monitorInfraUtils.constructNodeColorMap(analyticsNodeList);
self.renderView4Config(topleftColumn, sandeshModel,
Expand All @@ -32,8 +39,8 @@ define(['underscore', 'contrail-view',
self.renderView4Config(toprightCoulmn, queriesModel,
getAnalyticsNodeQueriesChartViewConfig(colorMap));

self.renderView4Config(bottomrightCoulmn, databseReadWritemodel,
getAnalyticsNodeDatabaseReadChartViewConfig(colorMap));
self.renderView4Config(bottomrightCoulmn, dbUsageModel,
getAnalyticsNodeDatabaseUsageChartViewConfig(colorMap));

self.renderView4Config(bottomleftColumn, databseReadWritemodel,
getAnalyticsNodeDatabaseWriteChartViewConfig(colorMap));}
Expand Down Expand Up @@ -153,7 +160,7 @@ define(['underscore', 'contrail-view',
axisLabelFontSize: 11,
tickPadding: 4,
margin: {
left: 40,
left: 50,
top: 35,
right: 0,
bottom: 40
Expand Down Expand Up @@ -256,7 +263,7 @@ define(['underscore', 'contrail-view',

}

function getAnalyticsNodeDatabaseReadChartViewConfig(colorMap) {
function getAnalyticsNodeDatabaseUsageChartViewConfig(colorMap) {
return {
elementId : ctwl.ANALYTICS_CHART_DATABASE_READ_SECTION_ID,
view : "SectionView",
Expand All @@ -273,12 +280,15 @@ define(['underscore', 'contrail-view',
brush: false,
height: 230,
xAxisLabel: '',
yAxisLabel: ctwl.ANALYTICS_CHART_DATABASE_READ_LABEL,
yAxisLabel: ctwl.ANALYTICS_CHART_DATABASE_USAGE,
yAxisOffset: 25,
yAxisFormatter: function (d) {
return formatBytes(d, true);
},
axisLabelFontSize: 11,
tickPadding: 8,
margin: {
left: 40,
left: 50,
top: 35,
right: 0,
bottom: 40
Expand All @@ -298,29 +308,8 @@ define(['underscore', 'contrail-view',
label: 'Time',
value: time
}, {
label: ctwl.ANALYTICS_CHART_DATABASE_READ_LABEL,
value: ifNull(data['nodeReqCnt'], '-')
}, {
label: ctwl.ANALYTICS_CHART_FAILED_DATABASE_READS+'(%)',
value: ifNull(data['reqFailPercent'], '-')
}]
};
} else {
tooltipConfig['title'] = {
name : data['name'],
type: ctwl.ANALYTICS_NODES
};
tooltipConfig['content'] = {
iconClass : false,
info : [{
label: 'Time',
value: time
},{
label: 'Total Requests',
value: ifNull(data['totalReqs'], '-')
}, {
label: ctwl.ANALYTICS_CHART_FAILED_DATABASE_READS,
value: ifNull(data['totalFailedReq'], '-')
label: ctwl.ANALYTICS_CHART_DATABASE_USAGE,
value: formatBytes(ifNull(data['perNodeDBUsage'], 0))
}]
};
}
Expand All @@ -347,33 +336,21 @@ define(['underscore', 'contrail-view',
var legendWrap = d3.select($(svg)[0]).append('g')
.attr('class','legend-wrap')
.attr('transform','translate('+width+',0)')
monitorInfraUtils.addLegendToSummaryPageCharts({
container: legendWrap,
cssClass: 'contrail-legend-error',
data: [data],
offset: -10,
colors: monitorInfraConstants.CONFIGNODE_FAILEDREQUESTS_COLOR,
nodeColorMap: {
'Failures': monitorInfraConstants.CONFIGNODE_FAILEDREQUESTS_COLOR,
},
label: 'Failures',
});
monitorInfraUtils.addLegendToSummaryPageCharts({
container: legendWrap,
cssClass: 'contrail-legend-stackedbar',
data: colorCodes,
offset: 70,
colors: colorCodes,
nodeColorMap: colorMap,
label: ctwl.ANALYTICS_NODES,
nodeColorMap: {
'DB Usage': monitorInfraConstants.SINGLE_NODE_COLOR[0]
},
label: ctwl.ANALYTICS_CHART_DATABASE_USAGE,
});
}
}
},
parseFn: function (response, chartViewModel) {
var dataBaseReadfailed = ctwl.ANALYTICS_CHART_DATABASE_READ_FAILS;
var dataBaseReaddata = ctwl.ANALYTICS_CHART_DATABASE_READ;
return monitorInfraParsers.parseAnlyticsNodeDataBaseReadWriteChartData(response, chartViewModel, dataBaseReadfailed, dataBaseReaddata);
return monitorInfraParsers.parseDatabaseUsageData(response, chartViewModel, 'MAX(database_usage.analytics_db_size_1k)');
}
}
}]
Expand Down

0 comments on commit b0acbf6

Please sign in to comment.