var env = process.env.NODE_ENV || 'development'; var cfg = require('../../config/config.js').get(env); var stats = require('../helper/stats.js'); var request = require('request'); var messageSOAP = require('../helper/messageSOAP.js'); var log = require('../helper/log.js'); var constants = require('../helper/constants.js'); var connection = []; connection.requestSoapToSACF = async function (soap,cmd,myMethod) { var service = cfg.service.SACF; var retry = service[myMethod+"_"+cmd+"_Retry"]; var params = { url : service[myMethod+"_"+cmd+"_URL"], body : messageSOAP.objectToSOAP(soap,cmd), method : myMethod, timeout : cfg.service.SACF[myMethod+"_"+cmd+"_Timeout"]*1000 } if(!retry) retry = cfg.Default_Retry; var objectData = { maxRetry : retry, curRetry : 1 } var funS = function(){ stats.sendSACFRequest(service.Name,cmd); log.logDetail.addOutput(service.Name,myMethod+"_"+cmd,constants.REQUEST,params,soap); }; var funStats = { start : funS, error : function(response){log.addErrorSummary(service.Name,myMethod+"_"+cmd,response.resultCode,response.resultDescription);} }; var result = await asyncRequest(params,objectData,funStats); return checkResponse(result,funStats); }; connection.requestJsonToD01 = async function (obj,cmd,myMethod) { var service = cfg.service.D01; var retry = service[myMethod+"_"+cmd+"_Retry"]; if(!retry) retry = cfg.Default_Retry; var objectData = { maxRetry : retry, curRetry : 1 } // JSON.stringify(json) var params = { url : service[myMethod+"_"+cmd+"_URL"], body : obj, method : myMethod, timeout : service[myMethod+"_"+cmd+"_Timeout"]*1000 } var funStats = function(){ stats.sendRestRequest(service.Name,myMethod,cmd); log.logDetail.addOutput(service.Name,myMethod+"_"+cmd,constants.Request,params,obj); }; var funStats = { start : funStats, error : function(response){log.addErrorSummary(service.Name,myMethod+"_"+cmd,response.resultCode,response.resultDescription);} }; var result = {}; result.response = {}; result.response.resultData = []; if(params.method == constants.METHOD.GET) { var genUrl = getUrl(params,service["searchRecordLimit"]); if(genUrl.length > 1) { console.log("multi Send"); var multiSend = []; for(var i=0;i { request(params, function (error, response, body) { if (error) { if( objectData.maxRetry == objectData.curRetry-1) { resolve({ 'body' : body, 'err' : error }); }else { var errRes = {}; if(error.code == 'ETIMEDOUT'){ // errRes.resultCode = "50003"; // errRes.resultDescription = "Timeout"; errRes.resultCode = "50000"; errRes.resultDescription = "System error"; } else if(error.code == 'ECONNREFUSED'){ // errRes.resultCode = "50002"; // errRes.resultDescription = "Reject"; errRes.resultCode = "50000"; errRes.resultDescription = "System error"; } else { errRes.resultCode = "50000"; errRes.resultDescription = "System error"; } // console.log("retry "+objectData.curRetry); funStat.error(errRes); objectData.curRetry++; resolve(asyncRequest(params,objectData,funStat)); } } else { // stats.receiveResponse(node,cmd,"Success"); resolve({ 'body' : body, 'response' : response }); } }); }); }; function getUrl(params,limit) { var returnData = []; var url = params.url; var fields = ""; var filter = { base : "", multi : [] }; // params.body = {}; // params.body.a = "aaa"; // params.body.b = "bbb"; // params.body.papa = []; // params.body.papa.push("1"); // params.body.papa.push("2"); // params.body.commandId = []; // params.body.commandId.push("1"); // params.body.commandId.push("2"); // params.body.commandId.push("3"); // params.body.commandId.push("4"); // params.body.commandId.push("5"); // params.body.commandId.push("6"); // params.body.commandId.push("7"); // params.body.commandId.push("8"); // params.body.c = "ccc"; // params.body.fields = "a,b,c,d"; // console.log(params.body); if(params.body) { var first = true; for (key in params.body) { if(key == "fields") fields = getFields(params.body.fields,first); else filter = getFilter(filter,key,params.body[key]); first = false; } if(first) fields += "?limit="+limit; else fields += "&limit="+limit; } if(filter.multi.length > 0) { //have multi var careData = filter.multi[0]; // console.log(freeSpace); for(var i=0;i careData.length) { filter.base = filter.base+"(|"+careData.data+")"; careData = filter.multi[i]; } } var myUrl = url+"?filter=("+filter.base+")"+fields; var freeSpace = cfg.Uri_length - myUrl.length; var arr = careData.data.split(")("); for(var j=0;j (arrData[i].length+3)) { loopUrl = loopUrl + arrData[i]; loopSpace = loopSpace - arrData[i].length; }else { if(loopUrl != "") { arrUrl.push(url+"?filter=("+filter+"(|"+loopUrl+")"+fields); loopUrl = arrData[i]; loopSpace = freeSpace - arrData[i].length; } } } if(loopUrl != "") arrUrl.push(url+"?filter=("+filter+"(|"+loopUrl+")"+fields); return arrUrl; } function checkResponse(result,funStats) { if(result.err) { log.log(result.err,'error'); if(result.err.code == constants.RESPONSECONN.STATS.ETIMEDOUT){ result.response = constants.RESPONSECONN.MESSAGE.ETIMEDOUT; // result.response.resultCode = "50003"; // result.response.resultDescription = "Timeout"; } else if(result.err.code == constants.RESPONSECONN.STATS.ECONNREFUSED){ result.response = constants.RESPONSECONN.MESSAGE.ECONNREFUSED; // result.response.resultCode = "50002"; // result.response.resultDescription = "Reject"; } else if(result.err.code == constants.RESPONSECONN.STATS.ESOCKETTIMEDOUT){ result.response = constants.RESPONSECONN.MESSAGE.ESOCKETTIMEDOUT; } else { if(result.err.resultDescription && result.err.resultDescription.indexOf(constants.RESPONSECONN.STATS.MISSING) != -1){ result.response.resultCode = constants.RESPONSERESULT.MISSING_INVALID.resultCode; result.response.resultDescription = result.err; } else { result.response = constants.RESPONSECONN.MESSAGE.ERROR; } } funStats.error(result.response) } return result; } module.exports = connection;