Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 59 additions & 7 deletions webroot/common/api/flowCache.api.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@ if (!module.parent) {
process.exit(1);
}

var STATS_PROP = {
'vn': {'inBytes':'SUM(vn_stats.in_bytes)','outBytes':'SUM(vn_stats.out_bytes)','inPkts':'SUM(vn_stats.in_pkts)',
'outPkts':'SUM(vn_stats.out_pkts)'},
'conn-vn': {'inBytes':'SUM(vn_stats.in_bytes)','outBytes':'SUM(vn_stats.out_bytes)','inPkts':'SUM(vn_stats.in_pkts)',
'outPkts':'SUM(vn_stats.out_pkts)'},
'vm': {'inBytes':'SUM(if_stats.in_bytes)','outBytes':'SUM(if_stats.out_bytes)','inPkts':'SUM(if_stats.in_pkts)',
'outPkts':'SUM(if_stats.out_pkts)'},
'fip' : {'inBytes':'SUM(fip_stats.in_bytes)','outBytes':'SUM(fip_stats.out_bytes)','inPkts':'SUM(fip_stats.in_pkts)',
'outPkts':'SUM(fip_stats.out_pkts)'},
};
var FLOW_SERIES_CACHE_EXPIRY_TIME = 10 * 60; /* 10 Minutes */

// Instantiate config and ops server access objects.
Expand All @@ -36,7 +46,7 @@ opServer = rest.getAPIServer({apiName:global.label.OPS_API_SERVER,
flowCache = module.exports;

function getFlowSeriesDataByAPIServer (context, appData, timeObj, srcQueryJSON,
destQueryJSON, callback)
destQueryJSON, callback,type)
{
var resultJSON = {};
var timeGran = timeObj['timeGran'];
Expand All @@ -47,7 +57,11 @@ function getFlowSeriesDataByAPIServer (context, appData, timeObj, srcQueryJSON,
if ((data != null) && data.length) {
//logutils.logger.debug("Getting Query Response as:" +
// JSON.stringify(data));
resultJSON = parseFlowSeriesData(data, timeObj);
if (global.STAT_TYPE == type) {
resultJSON = parseFlowSeriesDataForOracleStats(data, timeObj,context);
} else {
resultJSON = parseFlowSeriesData(data, timeObj);
}
/* Cache saving should be done in caller */
}
callback(err, resultJSON);
Expand Down Expand Up @@ -168,7 +182,44 @@ function parseFlowSeriesData (data, timeObj)
results['flow-series'] = resultJSON;
return results;
}

/*
* Function used to parse the stats oracle response for both virtual network and virtual machine
*/
function parseFlowSeriesDataForOracleStats(data, timeObj,context) {
var resultJSON = [];
var results = {};
var statsLen,stats;
var props = STATS_PROP[context];
try {
stats = data[0]['value'];
statsLen = stats.length;
} catch(e) {
stats = [];
statsLen = 0;
}
for (var i = 0; i < statsLen; i++) {
var obj = {};
obj['time'] = stats[i]['T='];
obj['inBytes'] = stats[i][props['inBytes']] != null ? stats[i][props['inBytes']] : 0;
obj['outBytes'] = stats[i][props['outBytes']] != null ? stats[i][props['outBytes']] : 0;
obj['inPkts'] = stats[i][props['inPkts']] != null ? stats[i][props['inPkts']] : 0;
obj['outPkts'] = stats[i][props['outPkts']] != null ? stats[i][props['outPkts']] : 0;
obj['totalPkts'] = obj['inPkts'] + obj['outPkts'];
obj['totalBytes'] = obj['inBytes'] + obj['outBytes'];
resultJSON[i] = obj;
}
/* Now Sort the data */
var totCnt = resultJSON.length;
resultJSON.sort(sortFlowSeriesDataByTS);
results['summary'] = {};
results['summary']['start_time'] = timeObj['start_time'];
results['summary']['end_time'] = timeObj['end_time'];
results['summary']['timeGran_microsecs'] =
Math.floor(parseInt(timeObj['timeGran'])) * global.MILLISEC_IN_SEC *
global.MICROSECS_IN_MILL;
results['flow-series'] = resultJSON;
return results;
}
function updateFlowSeriesQueryTimeGran (query, timeGran)
{
var selectQuery = query['select_fields'];
Expand All @@ -187,6 +238,8 @@ function updateFlowSeriesQueryTimeGran (query, timeGran)

function updateFlowSeriesQueryStartEndTime (query, startTime, endTime)
{
if (null == query)
return;
query['start_time'] = startTime;
query['end_time'] = endTime;
}
Expand Down Expand Up @@ -537,7 +590,7 @@ function getFlowSeriesDataByStartEndTime (context, appData, srcQueryJSON,
}

function getFlowSeriesData (context, appData, srcQueryJSON, destQueryJSON,
callback)
callback,type)
{
var timeObj = nwMonUtils.createTimeObjByAppData(appData);
var redisKey = getFlowSeriesRedisKey(context, appData);
Expand All @@ -546,15 +599,14 @@ function getFlowSeriesData (context, appData, srcQueryJSON, destQueryJSON,
appData['relStartTime'] = parseInt(appData['relStartTime']);
appData['relEndTime'] = parseInt(appData['relEndTime']);
}

updateFlowSeriesQueryStartEndTime(srcQueryJSON, timeObj['start_time'],
timeObj['end_time']);
updateFlowSeriesQueryStartEndTime(destQueryJSON, timeObj['start_time'],
timeObj['end_time']);
/* Check if the request consists of startTime and endTime */
if (appData['relStartTime'] != null) {
getFlowSeriesDataByStartEndTime(context, appData, srcQueryJSON,
destQueryJSON, callback);
destQueryJSON, callback,type);
return;
}
/* First check if we have entry for this */
Expand All @@ -569,7 +621,7 @@ function getFlowSeriesData (context, appData, srcQueryJSON, destQueryJSON,
function(err, flowData) {
callback(err, flowData);
});
});
},type);
} else {
/* Now check the time when we have the cache */
getFlowSeriesDataByCache(context, appData, JSON.parse(jsonData), srcQueryJSON,
Expand Down
2 changes: 1 addition & 1 deletion webroot/common/api/global.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ global.STR_GET_SCHEMA_FLOW_SERIES = 'getSchemaCPULoadFlowSeries';
global.STR_GET_COLLECTOR_CPU_FLOW_SERIES = 'getCollectorCPULoadFlowSeries';
global.STR_GET_QE_CPU_FLOW_SERIES = 'getQECPULoadFlowSeries';
global.STR_GET_OPS_CPU_FLOW_SERIES = 'getOpServerCPULoadFlowSeries';

global.STAT_TYPE = 'oracleStats'
module.exports = global;

20 changes: 12 additions & 8 deletions webroot/common/api/nwMon.utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,18 @@ function createTimeObj (appData)
function getStatDataByQueryJSON (srcQueryJSON, destQueryJSON, callback)
{
var dataObjArr = [];
commonUtils.createReqObj(dataObjArr, global.RUN_QUERY_URL,
global.HTTP_REQUEST_POST,
commonUtils.cloneObj(srcQueryJSON));
commonUtils.createReqObj(dataObjArr, global.RUN_QUERY_URL,
global.HTTP_REQUEST_POST,
commonUtils.cloneObj(destQueryJSON));
logutils.logger.debug("Query1 executing: " + JSON.stringify(dataObjArr[0]['data']));
logutils.logger.debug("Query2 executing:" + JSON.stringify(dataObjArr[1]['data']));
if (srcQueryJSON != null) {
commonUtils.createReqObj(dataObjArr, global.RUN_QUERY_URL,
global.HTTP_REQUEST_POST,
commonUtils.cloneObj(srcQueryJSON));
}
if (destQueryJSON != null) {
commonUtils.createReqObj(dataObjArr, global.RUN_QUERY_URL,
global.HTTP_REQUEST_POST,
commonUtils.cloneObj(destQueryJSON));
}
logutils.logger.debug("Query1 executing:" + JSON.stringify((dataObjArr[0] != null) ? dataObjArr[0]['data'] : ""));
logutils.logger.debug("Query2 executing:" + JSON.stringify((dataObjArr[1] != null) ? dataObjArr[1]['data'] : ""));
async.map(dataObjArr, commonUtils.getServerRespByRestApi(opServer, true),
function(err, data) {
callback(err, data);
Expand Down
72 changes: 49 additions & 23 deletions webroot/monitor/tenant-network/api/network.mon.api.js
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ function getVNVMData (vmJSON, vmName)
console.log("In getVNVMData(): IP List JSON Parse error:" + e);
}
try {
var fipData = jsonPath(vmJSON, "$..floating_ips");
var fipData = jsonPath(vmJSON, "$..fip_stats_list");
if (fipData[0].length == 0) {
return resultJSON;
}
Expand All @@ -304,6 +304,8 @@ function getVNVMData (vmJSON, vmName)
fipData[0][i]['ip_address'];
resultJSON['fipList'][i]['virtual_network'] =
fipData[0][i]['virtual_network'];
resultJSON['fipList'][i]['vm_vn_name'] =
fipData[0][i]['iface_name'];
}
} catch(e) {
console.log("In getVNVMData(): Floating IP List JSON Parse error:" + e);
Expand Down Expand Up @@ -403,10 +405,15 @@ function getFlowSeriesByVM (req, res)
var timeGran = req.query['timeGran'];
var minsAlign = req.query['minsAlign'];
var serverTime = req.query['useServerTime'];

var vmName = req.query['vmName'];
var vmVnName = req.query['vmVnName'];
var fip = req.query['fip'];
var appData = {
ip: ip,
vnName: vnName,
vmName: vmName,
vmVnName : vmVnName,
fip : fip,
sampleCnt: sampleCnt,
minsSince: minsSince,
minsAlign: minsAlign,
Expand Down Expand Up @@ -623,34 +630,50 @@ function getNetworkTopStatsDetails (req, res)
appData);
}

function getTrafficInEgrStat (resultJSON, srcVN, destVN)
function getTrafficInEgrStat (resultJSON, srcVN, destVN,type)
{
var inStat = resultJSON['in_stats'];
var outStat = resultJSON['out_stats'];
var inStatLen = inStat.length;
var outStatLen = outStat.length;
var results = {};
results['srcVN'] = srcVN;
results['destVN'] = destVN;
results['inBytes'] = 0;
results['inPkts'] = 0;
results['outBytes'] = 0;
results['outPkts'] = 0;
for (var i = 0; i < inStatLen; i++) {
if (destVN == inStat[i]['other_vn']) {
results['inBytes'] = inStat[i]['bytes'];
results['inPkts'] = inStat[i]['tpkts'];
break;
if(type != global.STAT_TYPE) {
var inStat = resultJSON['in_stats'];
var outStat = resultJSON['out_stats'];
var inStatLen = inStat.length;
var outStatLen = outStat.length;
for (var i = 0; i < inStatLen; i++) {
if (destVN == inStat[i]['other_vn']) {
results['inBytes'] = inStat[i]['bytes'];
results['inPkts'] = inStat[i]['tpkts'];
break;
}
}
}
for (var i = 0; i < outStatLen; i++) {
if (destVN == outStat[i]['other_vn']) {
results['outBytes'] = outStat[i]['bytes'];
results['outPkts'] = outStat[i]['tpkts'];
break;
for (var i = 0; i < outStatLen; i++) {
if (destVN == outStat[i]['other_vn']) {
results['outBytes'] = outStat[i]['bytes'];
results['outPkts'] = outStat[i]['tpkts'];
break;
}
}
return results;
} else {
if(resultJSON['vn_stats'] != null && resultJSON['vn_stats'][0]['StatTable.UveVirtualNetworkAgent.vn_stats'] != null) {
var stats = resultJSON['vn_stats'][0]['StatTable.UveVirtualNetworkAgent.vn_stats'];
for(var i = 0; i < stats.length; i++){
if(stats[i]['vn_stats.other_vn'] == destVN) {
results['inBytes'] = stats[i]['SUM(vn_stats.in_bytes)'] != null ? stats[i]['SUM(vn_stats.in_bytes)'] : 0;
results['outBytes'] = stats[i]['SUM(vn_stats.out_bytes)'] != null ? stats[i]['SUM(vn_stats.out_bytes)'] : 0;
results['inPkts'] = stats[i]['SUM(vn_stats.in_tpkts)'] != null ? stats[i]['SUM(vn_stats.in_tpkts)'] : 0;
results['outPkts'] = stats[i]['SUM(vn_stats.out_tpkts)'] != null ? stats[i]['SUM(vn_stats.out_tpkts)'] : 0;
break;
}
}
}
return results;
}
return results;
}

function getVNStatsJSONSummary (resultJSON, results)
Expand All @@ -661,13 +684,17 @@ function getVNStatsJSONSummary (resultJSON, results)
var outStat;
for (var i = 0; i < len; i++) {
resultJSON[i] = {};
try {
resultJSON[i]['vn_stats'] = results[i]['UveVirtualNetworkAgent']['vn_stats'];
}catch(e) {
resultJSON[i]['vn_stats'] = [];
}
try {
inStat =
results[i]['UveVirtualNetworkAgent']['in_stats']['list']['UveInterVnStats'];
inStatCnt = inStat.length;
resultJSON[i]['in_stats'] = [];
resultJSON[i]['out_stats'] = [];

for (var j = 0; j < inStatCnt; j++) {
resultJSON[i]['in_stats'][j] = {};
resultJSON[i]['in_stats'][j]['other_vn'] =
Expand All @@ -678,7 +705,6 @@ function getVNStatsJSONSummary (resultJSON, results)
inStat[j]['tpkts']['#text'];
}
} catch(e) {
resultJSON[i] = {};
resultJSON[i]['in_stats'] = [];
}
try {
Expand All @@ -705,9 +731,9 @@ function getNetworkInGressEgressTrafficStat (srcVN, destVN, callback)
var urlLists = [];
var resultJSON = [];

var url = '/analytics/virtual-network/' + srcVN;
var url = '/analytics/virtual-network/' + srcVN + '?flat';
urlLists[0] = [url];
url = '/analytics/virtual-network/' + destVN;
url = '/analytics/virtual-network/' + destVN + '?flat';
urlLists[1] = [url];

async.map(urlLists, commonUtils.getJsonViaInternalApi(opServer.api, true),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,10 @@ function topologyRenderer() {
configData['out_bytes'] = formatBytes(nodes[i]['more_attr']['out_bytes']);
configData['out_tpkts'] = ifNull(nodes[i]['more_attr']['out_tpkts'],'-');
configData['in_tpkts'] = ifNull(nodes[i]['more_attr']['in_tpkts'],'-');
configData['latest_in_bytes'] = formatBytes(nodes[i]['more_attr']['latest_in_bytes']);
configData['latest_out_bytes'] = formatBytes(nodes[i]['more_attr']['latest_out_bytes']);
configData['latest_out_tpkts'] = ifNull(nodes[i]['more_attr']['latest_out_tpkts'],'-');
configData['latest_in_tpkts'] = ifNull(nodes[i]['more_attr']['latest_in_tpkts'],'-');
}
if(nodes[i]['node_type'] == 'service-instance'){
var siData=ifNull(jsonPath(response,'$..service-instances')[0],[]);
Expand Down
Loading