/**
 * @parseVDNSRecords
 * private function
 * 1. Gets the Virtual DNS record list and then does an individual get on
 *    the record for a given virtual DNS
 */
function parseVDNSRecords(error, response, vdnsConfig, appData) 
{
	var vdnsRecordRef     = null;
	var vdnsRecordUrl     = null;
	var dataObjArr        = [];
	var vdnsObj         = null;
	var vdnsRecordRefsLen = 0;
	
    if ( 'virtual_DNS_records' in vdnsConfig['virtual-DNS']) {
    	vdnsRecordRef = vdnsConfig['virtual-DNS']['virtual_DNS_records'];
    	vdnsRecordRefsLen = vdnsRecordRef.length;
    }

    for (i = 0; i < vdnsRecordRefsLen; i++) {
    	if(vdnsRecordRef) {
    		vdnsObj = vdnsRecordRef[i];
            vdnsRecordUrl = '/virtual-DNS-record/' + vdnsObj['uuid'];
            commonUtils.createReqObj(dataObjArr, vdnsRecordUrl,
                    global.HTTP_REQUEST_GET, response[i], null, null,
                    appData);
    		
    	}
    }

	async.map(dataObjArr,
		  commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
          function(error, results) {
              VDNSRecordAggCb(error, results, vdnsConfig, 
                              function (error, data) {
                    commonUtils.handleJSONResponse(error, response, data);
              });
          });
          
}
function getVNDetailsByServiceInstances(serviceInstances, appData, callback) {
    var cnt = serviceInstances.length;
    var insertedProjList = {};
    var dataObjArr = [];

    for (var i = 0, j = 0; i < cnt; i++) {
        var serInst = serviceInstances[i]['service-instance'];
        var projUUID = serInst['parent_uuid'];
        if (null == insertedProjList[projUUID]) {
            reqUrl = '/project/' + projUUID;
            commonUtils.createReqObj(dataObjArr, reqUrl,
                global.HTTP_REQUEST_GET,
                null, null, null, appData);
            insertedProjList[projUUID] = projUUID;
        }
    }

    async.map(dataObjArr,
        commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
        function (err, configData) {
            getNetworkPolicyDetailsByProjList(configData, appData, function (err, data) {
                serviceInstances = updateServiceInstanceWithPolicy(serviceInstances,
                    data);
                callback(serviceInstances);
            });
        });
}
/**
 * @getLogicalInterfaceDetails
 * private function
 * get logical interafce details
 */
function getLogicalInterfaceDetails(dataObjPostArr, pRouters, prouterMap, callback)
{
    async.mapLimit(dataObjPostArr, 50,
        commonUtils.getAPIServerResponse(configApiServer.apiPost, true),
        function(error, results) {
            if (error) {
               callback(error, null);
            }
            var pRoutersCnt = pRouters.length;
            for (var i = 0; i < pRoutersCnt; i++) {
                pRouters[i]['physical-router']['totalIntfCount'] = 0;
                if(pRouters[i]['physical-router']['physical_interfaces'] != null)
                    pRouters[i]['physical-router']['totalIntfCount']  +=
                        pRouters[i]['physical-router']['physical_interfaces'].length;
                if(pRouters[i]['physical-router']['logical_interfaces'] != null)
                    pRouters[i]['physical-router']['totalIntfCount']  +=
                        pRouters[i]['physical-router']['logical_interfaces'].length;
                var prStartIndex = prouterMap[i][0];
                var prEndIndex = prouterMap[i][1];
                if(-1 == prStartIndex){
                    continue;
                }
                for (var j = prStartIndex; j <= prEndIndex; j++) {
                    pRouters[i]['physical-router']['totalIntfCount'] +=
                                results[j]['logical-interfaces']['count'];
                }
                delete pRouters[i]['physical-router']['physical_interfaces'];
                delete pRouters[i]['physical-router']['logical_interfaces'];
            }
            callback(error, pRouters);
        }
    );
}
function getPhysicalRoutersDetails(error, data, response, appData)
{
    var reqUrl            = null;
    var dataObjArr        = [];
    var i = 0, pRoutersLength  = 0;

    if (error) {
       commonUtils.handleJSONResponse(error, response, null);
       return;
    }
    if(data['physical-routers'] != null) {
        pRoutersLength = data['physical-routers'].length;
        for(i = 0; i < pRoutersLength; i++) {
            reqUrl = '/physical-router/' +  data['physical-routers'][i]['uuid'];
            commonUtils.createReqObj(dataObjArr, reqUrl, global.HTTP_REQUEST_GET,
                                    null, null, null, appData);
        }
        if(dataObjArr.length > 0) {
            async.map(dataObjArr,
                commonUtils.getAPIServerResponse(configApiServer.apiGet, true),
                function(error, results) {
                    if (error) {
                       commonUtils.handleJSONResponse(error, response, null);
                       return;
                    }
                    getPhysicalInterfaceDetails(error, results, response, appData);
                }
            );
        } else {
            commonUtils.handleJSONResponse(error, response, []);
        }
    } else {
        commonUtils.handleJSONResponse(error, response, []);
    }
}
 configApiServer.apiGet(url, appData, function (error, bgpJSON) {
     if (error) {
         callback(error, bgpJSON);
     } else {
         try {
             bgpCount = bgpJSON["bgp-routers"].length;
             for (i = 0; i < bgpCount; i += 1) {
                 uuid = bgpJSON["bgp-routers"][i].uuid;
                 bgpURLs[i] = '/bgp-router/' + uuid;
                 commonUtils.createReqObj(dataObjArr, bgpURLs[i],
                                          global.HTTP_REQUEST_GET, null,
                                          null, null, appData);
                 delete bgpJSON["bgp-routers"][i]["fq_name"];
             }
             async.map(dataObjArr,
                       commonUtils.getAPIServerResponse(configApiServer.apiGet,
                                                        true),
                       function (err, results) {
                 if (results) {
                     parseBgpJSON(resultJSON, results);
                     callback(null, resultJSON);
                 } else {
                     callback(err, resultJSON);
                 }
             });
         } catch(e) {
             console.log("In getBgpNodeList(): JSON parse error:" + e);
             callback(e, resultJSON);
         }
     }
 });
function updateVTData(vnData, lruuid, appData, callback){
    var vnDataArr = [];
    var vnDataLength = vnData.length;
    for (var i = 0; i < vnDataLength; i++){
        if("route_table_refs" in vnData[i]["virtual-network"]){
            var rtref = vnData[i]["virtual-network"]["route_table_refs"];
            if (rtref.length > 0){
                var rtrefLen = rtref.length;
                for (var j = 0; j < rtrefLen; j++){
                    if (rtref[j]["to"][2] == ("rt_"+lruuid)){
                        var vnuuid = vnData[i]["virtual-network"]["uuid"]
                        rtref.splice(j, 1);
                        var reqUrl = '/virtual-network/' + vnuuid;
                        var responceData = createvnObj(vnData[i], rtref);
                        commonUtils.createReqObj(vnDataArr, reqUrl,
                               global.HTTP_REQUEST_PUT, responceData, null, null,
                               appData);
                        break;
                    }
                }
            }
        }
    }
    if (vnDataArr.length > 0) {
        async.map(vnDataArr,
        commonUtils.getAPIServerResponse(configApiServer.apiPut, false),
        function(error, vnData) {
            callback(error, vnData);
            return;
        });
    } else {
        callback(null, []);
        return;
    }
}
 adminApiHelper.getControlNodeList(appData, function(err, configData) {
     if (err || (null == configData)) {
         commonUtils.handleJSONResponse(err, res, null);
         return;
     }
     var len = configData.length;
     for (var i = 0; i < len; i++) {
         reqUrl = '/analytics/uves/bgp-peer/*' + configData[i]['name'] + '*';
         commonUtils.createReqObj(dataObjArr, reqUrl,
                                  global.HTTP_REQUEST_GET, null, null, null,
                                  appData);
     }
     for (i = 0; i < len; i++) {
         reqUrl = '/analytics/uves/xmpp-peer/' + configData[i]['name'] +
             ':*?flat';
         commonUtils.createReqObj(dataObjArr, reqUrl,
                                  global.HTTP_REQUEST_GET, null, null, null,
                                  appData);
     }
     async.map(dataObjArr,
               commonUtils.getAPIServerResponse(opApiServer.apiGet, true),
               function(err, results) {
         for (var i = 0; i < len; i++) {
             resultJSON[i] = {};
             resultJSON[i] =
                 processControlNodePeerDetails(configData[i]['name'],
                                               results[i], results[i + len]);
             resultJSON[i]['host'] = configData[i]['name'];
             resultJSON[i]['ip'] = configData[i]['ip'];
         }
         commonUtils.handleJSONResponse(err, res, resultJSON);
     });
 });
 configApiServer.apiGet(siURL, appData, function(err, data) {
     if ((null != err) || (null == data) || 
         (null == data['service-instances'])) {
         commonUtils.handleJSONResponse(err, res, []);
         return;
     }
     var siData = data['service-instances'];
     var siCnt = siData.length;
     for (var i = 0; i < siCnt; i++) {
         var siReqURL = '/service-instance/' + siData[i]['uuid'];
         commonUtils.createReqObj(siDataObjArr, siReqURL,
                                  global.HTTP_REQUEST_GET, null, null,
                                  null, appData);
     }
     if (!siDataObjArr.length) {
         commonUtils.handleJSONResponse(err, res, []);
         return;
     }
     async.map(siDataObjArr,
               commonUtils.getAPIServerResponse(configApiServer.apiGet,
                                                false),
               function(err, results) {
         commonUtils.handleJSONResponse(err, res, results);
     });
 });
function getNetworkPolicyDetailsByProjList(projList, appData, callback) {
    var prjCnt = projList.length;
    var dataObjArr = [];

    for (var i = 0, k = 0; i < prjCnt; i++) {
        try {
            var policys =
                projList[i]['project']['network_policys'];
            var policyCnt = policys.length;
        } catch (e) {
            continue;
        }
        for (var j = 0; j < policyCnt; j++) {
            try {
                var reqUrl =
                    '/network-policy/' + policys[j]['uuid'];
                commonUtils.createReqObj(dataObjArr, reqUrl,
                    global.HTTP_REQUEST_GET, null, null,
                    null, appData);
            } catch (e) {
                continue;
            }
        }
    }
    async.map(dataObjArr,
        commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
        function (err, configData) {
            callback(err, configData);
        });
}
function getPhysicalInterfacesLogicalInterfaceCount(error, pRouters, response, appData){
    var pInterfacesLength = 0;
    var result = [];
    var dataObjArr        = [];
    var dataObjPostArr     = [];
    
    var prouterMap = [];//Keep the map of prouter uuid and array of arrays of pinterfaces
    var pRoutersCnt = pRouters.length;
    var totalCnt = 0;
    for(var k = 0; k < pRoutersCnt; k++){
        var prouter = pRouters[k];
        var pIntfUUIDs = [];
        if(prouter['physical-router'] != null && prouter['physical-router']['physical_interfaces'] != null && prouter['physical-router']['physical_interfaces'].length > 0){
            pInterfacesLength =
                prouter['physical-router']['physical_interfaces'].length;
            for(i = 0; i < pInterfacesLength; i++) {
                pIntfUUIDs.push(prouter['physical-router']['physical_interfaces'][i]['uuid']);
            }
            var dataObjArr = getChunkedUrl(pIntfUUIDs,appData);
            prouterMap[k] = [totalCnt, totalCnt + dataObjArr.length - 1];
            totalCnt = totalCnt + dataObjArr.length;
            dataObjPostArr = dataObjPostArr.concat(dataObjArr);
        } else {
            prouterMap[k] = [-1, -1];
        }
    }
    if(dataObjArr.length > 0) {
        async.mapLimit(dataObjPostArr, 50,
            commonUtils.getAPIServerResponse(configApiServer.apiPost, true),
            function(error, results) {
                if (error) {
                   commonUtils.handleJSONResponse(error, response, null);
                   return;
                }
                for (var i = 0; i < pRoutersCnt; i++) {
                    pRouters[i]['physical-router']['totalIntfCount'] = 0;
                    if(pRouters[i]['physical-router']['physical_interfaces'] != null)
                        pRouters[i]['physical-router']['totalIntfCount']  += pRouters[i]['physical-router']['physical_interfaces'].length;
                    if(pRouters[i]['physical-router']['logical_interfaces'] != null)
                        pRouters[i]['physical-router']['totalIntfCount']  += pRouters[i]['physical-router']['logical_interfaces'].length;
                    var prStartIndex = prouterMap[i][0];
                    var prEndIndex = prouterMap[i][1];
                    if(-1 == prStartIndex){
                        continue;
                    }
                    for (var j = prStartIndex; j <= prEndIndex; j++) {
                        pRouters[i]['physical-router']['totalIntfCount'] +=
                                    results[j]['logical-interfaces']['count'];
                    }
                    delete pRouters[i]['physical-router']['physical_interfaces'];
                    delete pRouters[i]['physical-router']['logical_interfaces'];
                }
                commonUtils.handleJSONResponse(error, response, pRouters);
            }
        );
    } else {
        commonUtils.handleJSONResponse(error, response, pRouters);
    }
}
 function(error, pRouterDetails) {
     //console.log("ERROR:", JSON.stringify(pRouterDetails));
     if(error || pRouterDetails == null || pRouterDetails.length == 0) {
         commonUtils.handleJSONResponse(error, response, []);
         return;
     }
     var pInfObjArry = [];
     var pRouterDetailLen = pRouterDetails.length;
     for(var i = 0; i < pRouterDetailLen; i++) {
         var pRouterDetail = pRouterDetails[i]['physical-router'];
         //get logical interfaces uuid under physical routers
         if(pRouterDetail.logical_interfaces != null) {
             var liProuterDet = pRouterDetail.logical_interfaces;
             var liProuterDetLen =  liProuterDet.length;
             for(var j = 0; j < liProuterDetLen; j++) {
                 liUUIDArry.push(liProuterDet[j].uuid);    
             }
         }
         //prepare physcial interface's obj array to get details
         if(pRouterDetail.physical_interfaces != null) {
             var piProuterDet = pRouterDetail.physical_interfaces;
             var piProuterDetLen = piProuterDet.length;
             for(var j = 0; j < piProuterDetLen; j++) {
                 var piReqUrl = '/physical-interface/' + piProuterDet[j].uuid;
                 commonUtils.createReqObj(pInfObjArry, piReqUrl, global.HTTP_REQUEST_GET,
                     null, null, null, appData);
             }
         }
     }
     async.map(pInfObjArry,
         commonUtils.getAPIServerResponse(configApiServer.apiGet, true),
             function(error, pInfDetails) {
                 if(error || pInfDetails == null || pInfDetails.length == 0){
                     commonUtils.handleJSONResponse(error, response, []);
                     return;
                 }
                 var pInfDetailsLen =  pInfDetails.length;
                 for(var i = 0; i < pInfDetailsLen; i++) {
                     var pInf = pInfDetails[i]['physical-interface'];
                     if(pInf.logical_interfaces != null && pInf.logical_interfaces.length > 0) {
                         var lInfs = pInf.logical_interfaces;
                         var lInfsLen = lInfs.length;
                         for(var j = 0; j < lInfsLen; j++) {
                             liUUIDArry.push(lInfs[j].uuid);
                         }
                     }
                 }
                 //get all logical interface details
                 var lInfObjArry = [];
                 var liUUIDArryLen = liUUIDArry.length;
                 for(var i = 0; i < liUUIDArryLen; i++) {
                     var lInfReqUrl = '/logical-interface/' + liUUIDArry[i];
                     commonUtils.createReqObj(lInfObjArry, lInfReqUrl, global.HTTP_REQUEST_GET,
                         null, null, null, appData);
                 }
                 getVirtualMachineInterfaceDetails(request, response, appData, lInfObjArry);
             }
     );
 }
/**
 * @updatePolicyUpdateNets
 * private function
 * Updates Network Policy references from VNs
 */
function updatePolicyUpdateNets(error, results, polConfig, policyId, appData, callback) 
{
    var vnRef = null;
    var polVNRef = {};
    var vnPolRef = [];
    var vnURL = null;
    var vnLen = 0, i = 0, j = 0;
    var polVNRefLen = [];
    var polVNRefObj = {};
    var vnUUID = null;
    var dataObjArr = [];

    if (error) {
        callback(error, null);
        return;
    }

    vnLen = results.length;

    for (i = 0; i < vnLen; i++) {
        vnUUID = results[i]['virtual-network']['uuid'];
        polVNRef = polConfig['network-policy']['net_uuid'][vnUUID];
        vnURL = '/virtual-network/' + vnUUID;
        if (!('network_policy_refs' in results[i]['virtual-network'])) {
            results[i]['virtual-network']['network_policy_refs'] = [];
        }

        vnPolRef = results[i]['virtual-network']['network_policy_refs'];
        if (polVNRef['oper'] == 'add') {
            polVNRef['attr']['sequence'] = { 'major':vnPolRef.length, 'minor':0};
            polVNRefObj =
            {
                to:polConfig['network-policy']['fq_name'],
                attr:polVNRef['attr'],
                uuid:polConfig['network-policy']['uuid']
            };
            vnPolRef.push(polVNRefObj);
        } else {
            vnPolRefLen = vnPolRef.length;
            for (j = 0; j < vnPolRefLen; j++) {
                if (polConfig['network-policy']['uuid']
                    == vnPolRef[j]['uuid']) {
                    vnPolRef.splice(j, 1);
                    break;
                }
            }
        }
        commonUtils.createReqObj(dataObjArr, vnURL, global.HTTP_REQUEST_PUT,
            results[i], null, null, appData);
    }

    async.map(dataObjArr,
        commonUtils.getAPIServerResponse(configApiServer.apiPut, false),
        function (error, results) {
            callback(error, results);
        });

    return;
}
/**
 * @getFipPoolsForProjectCb
 * private function
 * 1. Callback for getFipPoolsForProject
 */
function getFipPoolsForProjectCb (error, projectData, appData, callback) 
{
    var fipPool = {};
    var fipPoolReqArry = [];
    if (error) {
       callback(error, fipPool);
       return;
    }
    fipPool['floating_ip_pool_refs'] = [];
    if ('floating_ip_pool_refs' in projectData['project']) {
        fipPool['floating_ip_pool_refs'] =
               projectData['project']['floating_ip_pool_refs'];
        var poolLength = fipPool['floating_ip_pool_refs'].length;   
        for(var poolCnt = 0; poolCnt <  poolLength; poolCnt++) {
            var fipPoolReqUrl = '/floating-ip-pool/' + fipPool['floating_ip_pool_refs'][poolCnt].uuid;
            commonUtils.createReqObj(fipPoolReqArry, fipPoolReqUrl, global.HTTP_REQUEST_GET,
                null, null, null, appData);            
        }
        if(fipPoolReqArry.length > 0) {
            async.map(fipPoolReqArry, commonUtils.getAPIServerResponse(configApiServer.apiGet, true)
                , function(err, data){
                var nwReqArry = [];
                if (err) {
                     commonUtils.handleJSONResponse(err, response, null);
                     return;
                }
                if(data && data.length > 0) {
                    for(var poolCnt = 0; poolCnt <  data.length; poolCnt++) {
                        try {
                            var nwReqUrl =  '/' + data[poolCnt]['floating-ip-pool']['parent_type'] 
                                + '/' + data[poolCnt]['floating-ip-pool']['parent_uuid'];    
                            commonUtils.createReqObj(nwReqArry, nwReqUrl, global.HTTP_REQUEST_GET,
                                null, null, null, appData);            
                              
                        } catch (e) {
                            logutils.logger.error('getFipPoolsForProjectCb: JSON parse error :' + e);
                        }
                    }
                    if(nwReqArry.length > 0) { 
                        getFIPPoolSubnets(nwReqArry, appData, fipPool, function(subnetErr, finalFipPool) {
                            if(subnetErr) {
                                callback(subnetErr, finalFipPool);
                                return;
                            }
                            callback(null, finalFipPool);
                        });
                    } else {
                        callback(null, fipPool);
                    }    
                }                
            });        
        } else {
            callback(null, fipPool);
        }    
    } else {
        callback(null, fipPool);
    }
}
 configApiServer.apiGet(url, jobData, function (error, jsonData) {
     if (error) {
         sendNodeResByReq(pubChannel, saveChannelKey,
             global.HTTP_STATUS_INTERNAL_ERROR,
             global.STR_CACHE_RETRIEVE_ERROR,
             global.STR_CACHE_RETRIEVE_ERROR, reqType, done);
     } else {
         try {
             var resultJSON = jsonData,
                 vnURLs = [],
                 vnCount = resultJSON["virtual-routers"].length,
                 i, uuid, url;
             if (vnCount != 0) {
                 for (i = 0; i < vnCount; i += 1) {
                     uuid = resultJSON["virtual-routers"][i].uuid;
                     url = '/virtual-router/' + uuid;
                     logutils.logger.debug("getNodes: " + url);
                     vnURLs[i] = [url];
                     commonUtils.createReqObj(dataObjArr, vnURLs[i],
                                              global.HTTP_REQUEST_GET, null,
                                              null, null, jobData);
                     delete resultJSON["virtual-routers"][i]["fq_name"];
                 }
                 async.map(dataObjArr,
                           commonUtils.getAPIServerResponse(configApiServer.
                                                               apiGet,
                                                            true),
                           function (err, results) {
                     if (!err) {
                         adminApiHelper.processVRJSON(resultJSON, results);
                         getUnionBGPandVR(pubChannel, saveChannelKey,
                                          resultJSON, reqType, done, jobData);
                     } else {
                         sendNodeResByReq(pubChannel,
                                 saveChannelKey,
                                 global.HTTP_STATUS_INTERNAL_ERROR,
                                 global.STR_CACHE_RETRIEVE_ERROR,
                                 global.STR_CACHE_RETRIEVE_ERROR,
                                 reqType,
                                 done);
                     }
                 });
             } else {
                 getUnionBGPandVR(pubChannel, saveChannelKey, resultJSON,
                                  reqType, done, jobData);
             }
         } catch (e) {
             sendNodeResByReq(pubChannel,
                     saveChannelKey,
                     global.HTTP_STATUS_INTERNAL_ERROR,
                     global.STR_CACHE_RETRIEVE_ERROR,
                     global.STR_CACHE_RETRIEVE_ERROR,
                     reqType,
                     done);
         }
     }
 });
function processStorageTopologyRawList(res, appData, callback){
    var urlOSDList = "/cluster/topology/ceph/list";
    dataObjArr = getTopologyURLs(appData);
    async.map(dataObjArr,
        commonUtils.getAPIServerResponse(storageRest.apiGet, true),
        function(err, resultJSON) {
             callback(err,res,resultJSON);
        });
}
function processClusterStorageHealth(res, appData, callback){
    var urlOSDList = "/cluster/storage/health/list";
    dataObjArr = getClusterHealthURLs(appData);
    async.map(dataObjArr,
        commonUtils.getAPIServerResponse(storageRest.apiGet, true),
        function(err, resultJSON) {
             callback(err,res,resultJSON);
        });
}
function deleteAssociatedFirewallRules(ruleDataObjArry, appData, callback)
{
    async.map(ruleDataObjArry,
            commonUtils.getAPIServerResponse(configApiServer.apiDelete, false),
            function (error, deleteRulesSuccess){
                callback(error, deleteRulesSuccess);
            }
    );
}
     function(error, instanceIPsData) {
         if ((null != error) || (null == instanceIPsData) || (!instanceIPsData.length)) {
             callback(error,null);
             return;
         }
         //No subnets case.. return with the instance_ip details
         var tempVMIResourceObjCnt = tempVMIResourceObj.length;
         for(var i = 0; i < tempVMIResourceObjCnt; i++) {
             var vmi = tempVMIResourceObj[i]['virtual-machine-interface'];
             var instIPBackRefs = vmi['instance_ip_back_refs'];
             var instIPBackRefsCnt = instIPBackRefs.length;
             if(instIPBackRefs != null && instIPBackRefsCnt > 0) {
                 for(var j = 0; j < instIPBackRefsCnt; j++) {
                     var uuid = instIPBackRefs[j]['uuid'];
                     var instanceIPsdataLength = instanceIPsData.length;
                     for(var k = 0; k < instanceIPsdataLength; k++) {
                         if(instanceIPsData[k]['instance-ip']['uuid'] === uuid) {
                             instIPBackRefs[j] = instanceIPsData[k];
                             break;
                         }
                     }
                 }
             }
         }
         if(subnetDataObjArr.length < 1){
             //There are no subnets so just return the response from here
             callback(null, tempVMIResourceObj);
         } else {
             //Get subnet details
             async.mapLimit(subnetDataObjArr, global.ASYNC_MAP_LIMIT_COUNT,
                     commonUtils.getAPIServerResponse(configApiServer.apiGet, true),
                     function(error,subnetData){
                         if ((null != error) || (null == subnetData) || (!subnetData.length)) {
                             callback(error,null);
                             return;
                         }
                         var tempVMIResourceObjCnt = tempVMIResourceObj.length;
                         for (var i = 0; i < tempVMIResourceObjCnt; i++) {
                             var vmi = tempVMIResourceObj[i]['virtual-machine-interface'];
                             var subnetBackRefs = vmi['subnet_back_refs'];
                             var subnetBackRefsCnt = subnetBackRefs.length;
                             for(var j = 0; j < subnetBackRefsCnt; j++) {
                                 var uuid = subnetBackRefs[j]['uuid'];
                                 var subnetDataCnt = subnetData.length;
                                 for(var k = 0; k < subnetDataCnt; k++){
                                     if(subnetData[k]['subnet']['uuid'] === uuid) {
                                         subnetBackRefs[j] = subnetData[k];
                                         break;
                                     }
                                 }
                             }
                         }
                         callback(null, tempVMIResourceObj);
             });  //Async for subnet ends
         }
 });//Async for instance_ip ends
 redisClient.get(urlOSDList, function(error, cachedJSONStr) {
     if (error || cachedJSONStr == null) {
         async.map(dataObjArr,
             commonUtils.getAPIServerResponse(storageRest.apiGet, true),
             function(err, resultJSON) {
                 redisClient.setex(urlOSDList, expireTime, JSON.stringify(resultJSON));
                 callback(err,res,resultJSON);
             });
     } else {
         callback(null, res, JSON.parse(cachedJSONStr));
     }
 });
	configApiServer.apiGet(url, jobData, function (error, jsonData) {
		if (error) {
			sendNodeResByReq(pubChannel, saveChannelKey, global.HTTP_STATUS_INTERNAL_ERROR,
				global.STR_CACHE_RETRIEVE_ERROR, global.STR_CACHE_RETRIEVE_ERROR, reqType, done);

		} else {
			try {
				var bgpJSON = jsonData,
					bgpURLs = [],
					bgpCount = bgpJSON["bgp-routers"].length,
					i, uuid, url;
				if (bgpCount != 0) {
					for (i = 0; i < bgpCount; i += 1) {
						uuid = bgpJSON["bgp-routers"][i].uuid;
						url = '/bgp-router/' + uuid;
						logutils.logger.debug("getUnionBGPandVR: " + url);
						bgpURLs[i] = [url];
                        commonUtils.createReqObj(dataObjArr, bgpURLs[i],
                                                 global.HTTP_REQUEST_GET, null,
                                                 null, null, jobData);
						delete bgpJSON["bgp-routers"][i]["fq_name"];
					}
                    async.map(dataObjArr,
                              commonUtils.getAPIServerResponse(configApiServer.apiGet,
                                                               true),
                              function (err, results) {
						var i, name;
						if (!err) {
							processBGPRandVRJSON(bgpJSON, results, vrMap);
							bgpJSON = bgpJSON["bgp-routers"];
							for (i = 0; i < vrCount; i += 1) {
								name = vrJSON["virtual-routers"][i].name;
								if (name in vrMap) {
									bgpJSON[bgpJSON.length + 1] = vrJSON["virtual-routers"][i];
								}
							}
							sendNodeResByReq(pubChannel, saveChannelKey, global.HTTP_STATUS_RESP_OK,
								JSON.stringify(bgpJSON), JSON.stringify(bgpJSON), reqType, done);
						} else {
							sendNodeResByReq(pubChannel, saveChannelKey, global.HTTP_STATUS_INTERNAL_ERROR,
								global.STR_CACHE_RETRIEVE_ERROR, global.STR_CACHE_RETRIEVE_ERROR, reqType, done);
						}
					});
				} else {
					sendNodeResByReq(pubChannel, saveChannelKey, global.HTTP_STATUS_RESP_OK,
						JSON.stringify(bgpJSON), JSON.stringify(bgpJSON), reqType, done);
				}
			} catch (e) {
				sendNodeResByReq(pubChannel, saveChannelKey, global.HTTP_STATUS_INTERNAL_ERROR,
					global.STR_CACHE_RETRIEVE_ERROR, global.STR_CACHE_RETRIEVE_ERROR, reqType, done);
			}
		}
	});
 redisClient.get(cookieURL, function(error, cachedJSONStr) {
     if (error || cachedJSONStr == null) {
         async.map(dataObjArr,
             commonUtils.getAPIServerResponse(storageRest.apiGet, true),
             function(err, data) {
                 resultJSON = parseStoragePGPoolsData(data);
                 redisClient.setex(cookieURL, expireTime, JSON.stringify(resultJSON));
                 commonUtils.handleJSONResponse(err, res, resultJSON);
             });
     } else {
         commonUtils.handleJSONResponse(null, res, JSON.parse(cachedJSONStr));
     }
 });
function readVNForIpams(error, ipamConfig, ipamPostData, response, appData) 
{
    if (error) {
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }
    var dataObjArr = [];
    if (null !== ipamPostData['network-ipam']['virtual_network_refs'] &&
    	typeof nwRefs !== "undefined") {
    	var nwRefs = ipamPostData['network-ipam']['virtual_network_refs'];
		var nwRefsLen = nwRefs.length; 
		for(var i=0; i<nwRefsLen; i++) {
			var vn = ipamPostData['network-ipam']['virtual_network_refs'][i];
			var vnPostUrl = '/virtual-network/' + vn['uuid'].toString();
        
			commonUtils.createReqObj(dataObjArr, vnPostUrl,
                global.HTTP_REQUEST_GET, null, null, null,
                appData);
		}
        async.map(dataObjArr,
            commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
            function(error, results) {
        	    setIpamInVN(error, results, ipamConfig, ipamPostData, response, appData);
            });
    } else {
    	var domain = ipamPostData["network-ipam"]["fq_name"][0];
    	var project = ipamPostData["network-ipam"]["fq_name"][1];
    	var tenantId = domain + ":" + project;
        var vnsGetURL = "/virtual-networks";
	    configApiServer.apiGet(vnsGetURL, appData,
	    	function(error, data) {
	            for(var i=0; null != data["virtual-networks"][i]; i++) {
				    var vn = data["virtual-networks"][i];
				    var vnGetURL = '/virtual-network/' + vn['uuid'].toString();
			        commonUtils.createReqObj(dataObjArr, vnGetURL,
                        global.HTTP_REQUEST_GET, null, null, null, appData);
                }
	            if(dataObjArr.length > 0) {
		    	    async.map(dataObjArr,
		        	    commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
		        	    function(error, results) {
		        	        setIpamInVN(error, results, ipamConfig, ipamPostData, response, appData);
		        	    });
	            } else {
	            	commonUtils.handleJSONResponse(error, response, null);
	            }
	        });
    }
}
function getConfigPaginatedResponse (req, res, appData)
{
    var body = req.body;
    var type = body.type + 's';
    var uuidList = body.uuidList;
    var fields = body.fields;
    var dataObjGetArr = [];
    var configReqObjArr = [];
    var tmpArray = [];

    var chunk = 200;
    var uuidCnt = uuidList.length;
    for (var i = 0, j = uuidCnt; i < j; i += chunk) {
        tmpArray = uuidList.slice(i, i + chunk);
        var reqUrl = '/' + type + '?detail=true&obj_uuids=' + tmpArray.join(',');
        if ((null != fields) && (fields.length > 0)) {
            reqUrl += '&fields=' + fields.join(',');
        }
        commonUtils.createReqObj(dataObjGetArr, reqUrl, null, null, null, null,
                                 appData);
    }
    async.map(dataObjGetArr,
              commonUtils.getAPIServerResponse(configApiServer.apiGet, true),
              function(error, results) {
        var resultJSON = [];
        var resCnt = results.length;
        for (var i = 0; i < resCnt; i++) {
            results[i] = results[i][type];
            resultJSON = resultJSON.concat(results[i]);
        }
        var configPageCB = getConfigPageRespCB[body.type];
        if (null == configPageCB) {
            commonUtils.handleJSONResponse(null, res, resultJSON);
            return;
        }
        resCnt = resultJSON.length;
        for (i = 0; i < resCnt; i++) {
            configReqObjArr.push({'type': body.type, 'data': resultJSON[i],
                                 'appData': appData});
        }
        async.map(configReqObjArr, getConfigPageRespAsync,
                  function(err, customConfigData) {
            commonUtils.handleJSONResponse(err, res, customConfigData);
            return;
        });
    });
}
/**
 * Fetch and attach Virtual Routers details to the response
 * @param error
 * @param pRouters
 * @param response
 * @param appData
 */
function getVirtualRouterDetails(error, pRouters, response, appData){
    var vroutersLength = 0;
    var result = [];
    var dataObjArr        = [];
    for(var k = 0; k < pRouters.length; k++){
        var prouter = pRouters[k];
        if(prouter['physical-router'] != null && prouter['physical-router']['virtual_router_refs'] != null && prouter['physical-router']['virtual_router_refs'].length > 0){
            vroutersLength = prouter['physical-router']['virtual_router_refs'].length;
            for(i = 0; i < vroutersLength; i++) {
                var vrouter = prouter['physical-router']['virtual_router_refs'][i];
                reqUrl = '/virtual-router/' + vrouter['uuid'];
                commonUtils.createReqObj(dataObjArr, reqUrl, global.HTTP_REQUEST_GET,
                                        null, null, null, appData);
            }
        }
    }
    if(dataObjArr.length > 0) {
        async.map(dataObjArr,
            commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
            function(error, vrouters) {
                if (error) {
                   commonUtils.handleJSONResponse(error, response, null);
                   return;
                }
                if(vrouters.length > 0){

                    for(var j=0 ;j < pRouters.length; j++){
                        pRouters[j]['physical-router']['virtual-routers'] = [];
                        for(var l=0 ; l < vrouters.length; l++){
                            var prouterBackRefs = vrouters[l]['virtual-router']['physical_router_back_refs'];
                            if(prouterBackRefs != null && prouterBackRefs instanceof Array && prouterBackRefs.length > 0){
                                for(var k=0; k < prouterBackRefs.length; k++){
                                    if(pRouters[j]['physical-router']['uuid'] == prouterBackRefs[k]['uuid']){
                                        pRouters[j]['physical-router']['virtual-routers'].push(vrouters[l]['virtual-router']);
                                    }
                                }
                            }
                        }
                    }
                    commonUtils.handleJSONResponse(error, response, pRouters);
                }
            }
        );
    } else {
        commonUtils.handleJSONResponse(error, response, pRouters);
    }
}
/**
 * Fetch and attach the interfaces details to the response
 * @param error
 * @param pRouters
 * @param response
 * @param appData
 */
function getPhysicalInterfaceDetails(error, pRouters, response, appData){
    var pInterfacesLength = 0;
    var result = [];
    var dataObjArr        = [];

    for(var k = 0; k < pRouters.length; k++){
        var prouter = pRouters[k];
        if(prouter['physical-router'] != null && prouter['physical-router']['physical_interfaces'] != null && prouter['physical-router']['physical_interfaces'].length > 0){
            pInterfacesLength = prouter['physical-router']['physical_interfaces'].length;
            for(i = 0; i < pInterfacesLength; i++) {
                var pInterface = prouter['physical-router']['physical_interfaces'][i];
                reqUrl = '/physical-interface/' + pInterface['uuid'];
                commonUtils.createReqObj(dataObjArr, reqUrl, global.HTTP_REQUEST_GET,
                                        null, null, null, appData);
            }
        }
    }
    if(dataObjArr.length > 0) {
        async.map(dataObjArr,
            commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
            function(error, pInterfaces) {
                if (error) {
                   commonUtils.handleJSONResponse(error, response, null);
                   return;
                }
                if(pInterfaces.length > 0){

                    for(var j=0 ;j < pRouters.length; j++){
                        pRouters[j]['physical-router']['physical_interfaces'] = [];
                        for(var l=0 ; l < pInterfaces.length; l++){
                            if(pRouters[j]['physical-router']['uuid'] == pInterfaces[l]['physical-interface']['parent_uuid']){
                                pRouters[j]['physical-router']['physical_interfaces'].push(pInterfaces[l]['physical-interface']);
                            }
                        }
                    }
//                    commonUtils.handleJSONResponse(error, response, pRouters);
                    getVirtualRouterDetails(error, pRouters, response, appData);
                } else {
                    getVirtualRouterDetails(error, pRouters, response, appData);
                }
            }
        );
    } else {
        getVirtualRouterDetails(error, pRouters, response, appData);
    }
}
	    	function(error, data) {
	            for(var i=0; null != data["virtual-networks"][i]; i++) {
				    var vn = data["virtual-networks"][i];
				    var vnGetURL = '/virtual-network/' + vn['uuid'].toString();
			        commonUtils.createReqObj(dataObjArr, vnGetURL,
                        global.HTTP_REQUEST_GET, null, null, null, appData);
                }
	            if(dataObjArr.length > 0) {
		    	    async.map(dataObjArr,
		        	    commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
		        	    function(error, results) {
		        	        setIpamInVN(error, results, ipamConfig, ipamPostData, response, appData);
		        	    });
	            } else {
	            	commonUtils.handleJSONResponse(error, response, null);
	            }
	        });
 configApiServer.apiGet(vnListURL, appData, function(err, vnList) {
     if ((null != err) || (null == vnList) || 
         (null == vnList['virtual-networks'])) {
         callback(err, fipPool);
         return;
     }
     var vns = vnList['virtual-networks'];
     var vnCnt = vns.length;
     for (var i = 0; i < vnCnt; i++) {
         var vnURL = '/virtual-network/' + vns[i]['uuid'] +
         '?exclude_back_refs=true';
         commonUtils.createReqObj(dataObjArr, vnURL, global.HTTP_REQUEST_GET,
                                  null, null, null, appData);
     }
     if (!dataObjArr.length) {
         callback(null, fipPool);
         return;
     }
     async.map(dataObjArr, 
               commonUtils.getAPIServerResponse(configApiServer.apiGet,
                                                true),
               function(error, results) {
         if ((null != error) || (null == results)) {
             callback(error, fipPool);
             return;
         }
         var resCnt = results.length;
         for (i = 0; i < resCnt; i++) {
             try {
                 var vn = results[i]['virtual-network'];
                 if ((true == vn['router_external']) &&
                     (null != vn['floating_ip_pools'])) {
                     var subnets = parseVNSubnets(results[i]);
                     var fipCnt = vn['floating_ip_pools'].length;
                     for(var j = 0; j < fipCnt ; j++) {  
                         vn['floating_ip_pools'][j]['subnets'] =  subnets;                       
                         fipPool['floating_ip_pool_refs'].push(vn['floating_ip_pools'][j]);                                
                     }    
                 }
             } catch(e) {
                 continue;
             }
         }
         callback(null, fipPool);
     });
 });
function getStoragePGSummary(req, res, appData){
    var dataObjArr = [];
    var resultJSON = [];
    urlStatus = storageApi.url.status;
    commonUtils.createReqObj(dataObjArr, urlStatus, null, null, 
                                         null, null, appData);

    urlPGSummary = storageApi.url.pgDumpSummary;//"/pg/dump?dumpcontents=summary";
    commonUtils.createReqObj(dataObjArr, urlPGSummary, null, null, 
                                         null, null, appData);
     async.map(dataObjArr,
                      commonUtils.getAPIServerResponse(storageRest.apiGet, true),
                      function(err, data) {
                resultJSON = parseStoragePGData(data);        
                commonUtils.handleJSONResponse(err, res, resultJSON);
            });
}
Exemple #29
0
function vmIfAggCb(error, vmIfList, logicalRouterDetail, appData, callback) 
{
    var dataObjArr = [];
    if (error) {    
        callback(error, null);
        return;
    }
    var vmiLen = vmIfList.length;
    if( vmiLen <= 0) {
        callback(error,logicalRouterDetail);
        return;
    }
    for(var i=0; i<vmiLen; i++) {
        logicalRouterDetail['logical-router']["virtual_machine_interface_refs"][i]["virtual_network_refs"] = vmIfList[i]["virtual-machine-interface"]["virtual_network_refs"]
        if('instance_ip_back_refs' in vmIfList[i]["virtual-machine-interface"]) {
            var vm_ref = vmIfList[i]["virtual-machine-interface"]["instance_ip_back_refs"];
            if (vm_ref) {
                logicalRouterDetail['logical-router']["virtual_machine_interface_refs"][i]['instance_ip_back_refs'] = vm_ref;
            }
        }
    }
    for(var i=0; i<vmiLen; i++) {
        if('instance_ip_back_refs' in vmIfList[i]["virtual-machine-interface"]) {
            var inst_ip_ref = logicalRouterDetail['logical-router']["virtual_machine_interface_refs"][i]["instance_ip_back_refs"][0];
            if (inst_ip_ref && 'uuid' in inst_ip_ref) {
                var reqUrl = '/instance-ip/' + inst_ip_ref['uuid'];
            
                commonUtils.createReqObj(dataObjArr, reqUrl,
                                         global.HTTP_REQUEST_GET, 
                                         null, null, null, appData);
            }
        }
    }
    async.map(dataObjArr,
            commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
            function(error, results) {
                if(error){
                    callback(error, results);
                    return;
                }
                instanceIPRefAggCb(error, results, logicalRouterDetail, vmiLen, appData, function(error, logicalRouterDetail){
                    callback(error, logicalRouterDetail);
                });
            });
}
/*
 * @getServiceInstancesCb
 * private function
 * 1. Callback for getServiceInstances
 * 2. Reads the response of per project SI list from config api server
 *    and sends it back to the client.
 */
function getServiceInstancesCB(error, siListData, response, appData, template)
{
    var reqUrl = null;
    var dataObjArr = [];
    var i = 0, siLength = 0;
    var serviceInstances = {};
    var emptyResult = [];

    if (error) {
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }

    serviceInstances['service_instances'] = [];

    if ('service_instances' in siListData['project']) {
        serviceInstances['service_instances'] =
            siListData['project']['service_instances'];
    }

    siLength = serviceInstances['service_instances'].length;

    if (!siLength) {
        commonUtils.handleJSONResponse(null, response, emptyResult);
        return;
    }

    for (i = 0; i < siLength; i++) {
        var siRef = serviceInstances['service_instances'][i];
        reqUrl = '/service-instance/' + siRef['uuid'];
        commonUtils.createReqObj(dataObjArr, reqUrl, global.HTTP_REQUEST_GET,
            null, null, null, appData);
    }
    async.map(dataObjArr,
              commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
              function (error, results) {
        if ((null != error) || (null == results)) {
            commonUtils.handleJSONResponse(error, response, null);
            return;
        }
        siGetListAggCB(results, response, appData);
    });
}