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 moment = require('moment'); var connection = []; connection.requestSoapToSACF = async function (req,soap,cmd,myMethod) { try { log.log("Connect to SACF") 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 } log.log("requestData : "+JSON.stringify(params)) if(!retry) retry = cfg.Default_Retry; var objectData = { maxRetry : retry, curRetry : 1 } var funStats = { start : function(){ stats.sendSACFRequest(service.Name,cmd); log.logDetail.addOutput(req,service.Name,myMethod+"_"+cmd,constants.REQUEST,params,soap); }, end : function(){ // stats.sendSACFRequest(service.Name,cmd); // log.logDetail.addOutput(req,service.Name,myMethod+"_"+cmd,constants.REQUEST,params,soap); }, // error : function(response){log.addErrorSummary(req,service.Name,myMethod+"_"+cmd,response.resultCode,response.resultDescription);} }; var result = await asyncRequest(params,objectData,funStats); // return checkResponse(result,funStats); return result; } catch(err) { log.log(err); var result = { response : constants.RESPONSECONN.MESSAGE.ERROR }; return result; } }; connection.requestJsonToD01 = async function (req,obj,cmd,myMethod,filter) { try { log.log("Connect to D01") if(myMethod === constants.METHOD.POST) obj.dateCreate = moment().format("YYYY-MM-DDTHH:mm:ss+0700"); 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 } log.log("requestData : "+JSON.stringify(params)) var funStats = { start : function(){ stats.sendRestRequest(service.Name,myMethod,cmd); log.logDetail.addOutput(req,service.Name,myMethod+"_"+cmd,constants.REQUEST,params,obj); }, end : function(resultObj){ var returnData = {}; if(resultObj.err) { //connect err => retry var response = {}; if(resultObj.err.code == constants.RESPONSECONN.STATS.ETIMEDOUT){ response = constants.RESPONSECONN.MESSAGE.ETIMEDOUT; } else if(resultObj.err.code == constants.RESPONSECONN.STATS.ECONNREFUSED){ response = constants.RESPONSECONN.MESSAGE.ECONNREFUSED; } else if(resultObj.err.code == constants.RESPONSECONN.STATS.ESOCKETTIMEDOUT){ response = constants.RESPONSECONN.MESSAGE.ESOCKETTIMEDOUT; } stats.receiveRestResponse(service.Name,myMethod,cmd,constants.ERROR); log.logDetail.addInput(req,service.Name,myMethod+"_"+cmd,constants.RESPONSE,resultObj,response); log.addErrorSummary(req,service.Name,myMethod+"_"+cmd,response.resultCode,response.resultDescription); returnData.retry = true; }else { if(!resultObj.response) { //no response data => retry var response = constants.RESPONSERESULT.ERROR; stats.receiveBadRestResponse(service.Name,myMethod,cmd); log.logDetail.addInput(req,service.Name,myMethod+"_"+cmd,constants.RESPONSE,resultObj,response); log.addErrorSummary(req,service.Name,myMethod+"_"+cmd,response.resultCode,response.resultDescription); returnData.retry = true; }else { try { var result = JSON.parse(resultObj.body); if(!result.resultCode || !result.resultDescription) { //Missing resultCode or resultDescription => retry log.log("Missing resultCode or resultDescription"); var response = result; stats.receiveBadRestResponse(service.Name,myMethod,cmd); log.logDetail.addInput(req,service.Name,myMethod+"_"+cmd,constants.RESPONSE,resultObj,response); log.addErrorSummary(req,service.Name,myMethod+"_"+cmd,response.resultCode,response.resultDescription); returnData.retry = true; returnData.response = response; returnData.err = constants.RESPONSERESULT.MISSING_INVALID.developerMessage; }else { //check normal var response = result; log.logDetail.addInput(req,service.Name,myMethod+"_"+cmd,constants.RESPONSE,resultObj,result); if(result.resultCode.startsWith("2")) { if(result.resultData && result.resultData.length>0) { stats.receiveRestResponse(service.Name,myMethod,cmd,constants.SUCCESS); log.addSuccessSummary(req,service.Name,myMethod+"_"+cmd,result.resultCode,constants.SUCCESS); }else { stats.receiveRestResponse(service.Name,myMethod,cmd,constants.RESPONSERESULT.DATA_NOT_FOUND.developerMessage); log.addErrorSummary(req,service.Name,myMethod+"_"+cmd,constants.RESPONSERESULT.DATA_NOT_FOUND.resultCode,constants.RESPONSERESULT.DATA_NOT_FOUND.developerMessage); } returnData.retry = false; returnData.response = response; returnData.err = response.resultDescription; } else if(result.resultCode.startsWith("404")){ stats.receiveRestResponse(service.Name,myMethod,cmd,constants.RESPONSERESULT.DATA_NOT_FOUND.developerMessage); log.addErrorSummary(req,service.Name,myMethod+"_"+cmd,result.resultCode,result.developerMessage); returnData.retry = false; returnData.response = response; returnData.err = response.resultDescription; } else if(result.resultCode.startsWith("5")){ stats.receiveRestResponse(service.Name,myMethod,cmd,constants.ERROR); log.addErrorSummary(req,service.Name,myMethod+"_"+cmd,result.resultCode,result.developerMessage); //retry returnData.retry = true; returnData.response = response; returnData.err = response.resultDescription; } else { stats.receiveRestResponse(service.Name,myMethod,cmd,constants.ERROR); log.addErrorSummary(req,service.Name,myMethod+"_"+cmd,result.resultCode,result.developerMessage); //retry returnData.retry = true; returnData.response = response; returnData.err = response.resultDescription; } } }catch(err) { // returnData.response = constants.RESPONSERESULT.ERROR; returnData.err = constants.RESPONSERESULT.ERROR; returnData.retry = true; } } } return returnData; } }; var result = {}; result.response = {}; var resultData = []; if(params.method == constants.METHOD.GET) { if(filter && filter == "or"){ var genUrl = getOrUrl(params); } else{ 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) { funStat.start(); log.log("URL : "+params.url); if (error) { // if(objectData.maxRetry == objectData.curRetry-1) // { // resolve({ // 'body' : body, // 'err' : error // }); // }else // { // var responseObj = { // 'body' : body, // 'err' : error // }; // if(funStat.end(responseObj)) // { // objectData.curRetry++; // resolve(asyncRequest(params,objectData,funStat)); // } // } } else { // var responseObj = { // 'body' : body, // 'response' : response // }; // resolve(funStat.end(responseObj)); } var responseObj = { 'body' : body, 'response' : response, 'err' : error }; var result = funStat.end(responseObj); if(result.retry) { if(objectData.maxRetry == objectData.curRetry-1) resolve(result); else { objectData.curRetry++; resolve(asyncRequest(params,objectData,funStat)); } }else resolve(result); }); }); }; function getUrlFilter(url,filter){ var returnData = []; var myfilter = "" for(var i in filter){ myfilter += myfilter+"("+i+"="+filter[i]+")" } var myUrl = url+"?filter="+myfilter // var myUrl = url+"?filter=("+filter.base+")"; returnData.push(myUrl); return myUrl; } 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"; // params.body.customerId = ["1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6","1b6a768e52e9a1e11518a1c6"]; // limit = 100; // 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("Final Response : "+result.err,'error'); // if(result.err.code == constants.RESPONSECONN.STATS.ETIMEDOUT){ // result.response = constants.RESPONSECONN.MESSAGE.ETIMEDOUT; // } else if(result.err.code == constants.RESPONSECONN.STATS.ECONNREFUSED){ // result.response = constants.RESPONSECONN.MESSAGE.ECONNREFUSED; // } 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) // }else // log.log("Final Response : "+JSON.stringify(result)); // return result; // } module.exports = connection;