Commit 7c42b71f7c6e8e123865b523c0823ff02eb079f6

Authored by Nattapon Wongpaet
2 parents d9ef9566 60cef8c8
Exists in master and in 1 other branch dev

Merge branch 'master' of http://git.sourcecode.co.th/nattaponw/spw

Showing 1 changed file with 89 additions and 25 deletions   Show diff stats
ais-structure/src/modules/helper/connection.js
@@ -10,17 +10,36 @@ var connection = []; @@ -10,17 +10,36 @@ var connection = [];
10 10
11 connection.requestSoapToSACF = async function (soap,cmd,myMethod) { 11 connection.requestSoapToSACF = async function (soap,cmd,myMethod) {
12 12
  13 + var service = cfg.service.SACF;
  14 + var retry = service[myMethod+"_"+cmd+"_Retry"];
  15 +
13 var params = { 16 var params = {
14 - url : cfg.service.SACF[myMethod+"_"+cmd+"_URL"], 17 + url : service[myMethod+"_"+cmd+"_URL"],
15 body : messageSOAP.objectToSOAP(soap,cmd), 18 body : messageSOAP.objectToSOAP(soap,cmd),
16 method : myMethod, 19 method : myMethod,
17 timeout : cfg.service.SACF[myMethod+"_"+cmd+"_Timeout"]*1000 20 timeout : cfg.service.SACF[myMethod+"_"+cmd+"_Timeout"]*1000
18 } 21 }
19 22
20 - stats.sendSACFRequest(cfg.service.SACF.Name,cmd)  
21 - log.logDetail.addOutput(cfg.service.SACF.Name,cmd,"Request",params,soap); 23 + if(!retry)
  24 + retry = cfg.Default_Retry;
  25 +
  26 + var objectData = {
  27 + maxRetry : retry,
  28 + curRetry : 1
  29 + }
  30 +
  31 + var funStats = function(){
  32 + stats.sendSACFRequest(service.Name,cmd);
  33 + log.logDetail.addOutput(service.Name,cmd,"Request",params,soap);
  34 + };
  35 +
  36 + var funStats = {
  37 + start : funStats,
  38 + error : function(response){log.addErrorSummary(service.Name,cmd,response);}
  39 + };
  40 +
22 41
23 - var result = await asyncRequest(params,cmd,cfg.service.SACF.Name); 42 + var result = await asyncRequest(params,objectData,funStats);
24 43
25 if(result.err) 44 if(result.err)
26 { 45 {
@@ -48,7 +67,16 @@ connection.requestSoapToSACF = async function (soap,cmd,myMethod) { @@ -48,7 +67,16 @@ connection.requestSoapToSACF = async function (soap,cmd,myMethod) {
48 67
49 connection.requestJsonToD01 = async function (obj,cmd,myMethod) { 68 connection.requestJsonToD01 = async function (obj,cmd,myMethod) {
50 69
51 - var service = cfg.service.D01; 70 + var service = cfg.service.D01;
  71 + var retry = service[myMethod+"_"+cmd+"_Retry"];
  72 + if(!retry)
  73 + retry = cfg.Default_Retry;
  74 +
  75 + var objectData = {
  76 + maxRetry : retry,
  77 + curRetry : 1
  78 + }
  79 +
52 // JSON.stringify(json) 80 // JSON.stringify(json)
53 var params = { 81 var params = {
54 url : service[myMethod+"_"+cmd+"_URL"], 82 url : service[myMethod+"_"+cmd+"_URL"],
@@ -57,13 +85,23 @@ connection.requestJsonToD01 = async function (obj,cmd,myMethod) { @@ -57,13 +85,23 @@ connection.requestJsonToD01 = async function (obj,cmd,myMethod) {
57 timeout : service[myMethod+"_"+cmd+"_Timeout"]*1000 85 timeout : service[myMethod+"_"+cmd+"_Timeout"]*1000
58 } 86 }
59 87
60 - log.logDetail.addOutput(service.Name,cmd,"Request",params,params.body); 88 + var funStats = function(){
  89 + stats.sendRestRequest(service.Name,myMethod,cmd);
  90 + log.logDetail.addOutput(service.Name,cmd,"Request",params,obj);
  91 + };
  92 +
  93 + var funStats = {
  94 + start : funStats,
  95 + error : function(response){log.addErrorSummary(service.Name,cmd,response);}
  96 + };
  97 +
  98 +
61 99
62 var result = {}; 100 var result = {};
63 result.response = {}; 101 result.response = {};
64 result.response.resultData = []; 102 result.response.resultData = [];
65 103
66 - stats.sendRestRequest(service.Name,myMethod,cmd); 104 +
67 105
68 if(params.method == "GET") 106 if(params.method == "GET")
69 { 107 {
@@ -76,7 +114,7 @@ connection.requestJsonToD01 = async function (obj,cmd,myMethod) { @@ -76,7 +114,7 @@ connection.requestJsonToD01 = async function (obj,cmd,myMethod) {
76 for(var i=0;i<genUrl.length;i++) 114 for(var i=0;i<genUrl.length;i++)
77 multiSend.push({url:genUrl[i],method:params.method}); 115 multiSend.push({url:genUrl[i],method:params.method});
78 116
79 - var parallelRes = await parallelRequest(multiSend,cmd,cfg.service.D01.Name); 117 + var parallelRes = await parallelRequest(multiSend,objectData,funStats);
80 118
81 var dataRes = {}; 119 var dataRes = {};
82 for(var i=0;i<multiSend.length;i++) 120 for(var i=0;i<multiSend.length;i++)
@@ -122,7 +160,7 @@ connection.requestJsonToD01 = async function (obj,cmd,myMethod) { @@ -122,7 +160,7 @@ connection.requestJsonToD01 = async function (obj,cmd,myMethod) {
122 params.url = genUrl[0]; 160 params.url = genUrl[0];
123 delete params.body; 161 delete params.body;
124 162
125 - var resultRes = await asyncRequest(params,cmd,service.Name); 163 + var resultRes = await asyncRequest(params,objectData,funStats);
126 164
127 // console.log(result); 165 // console.log(result);
128 if(resultRes.response) 166 if(resultRes.response)
@@ -138,9 +176,10 @@ connection.requestJsonToD01 = async function (obj,cmd,myMethod) { @@ -138,9 +176,10 @@ connection.requestJsonToD01 = async function (obj,cmd,myMethod) {
138 { 176 {
139 params.body = JSON.stringify(params.body); 177 params.body = JSON.stringify(params.body);
140 178
141 - var resultRes = await asyncRequest(params,cmd,service.Name); 179 + var resultRes = await asyncRequest(params,objectData,funStats);
142 180
143 - result.response = JSON.parse(resultRes.body); 181 + if(resultRes.response)
  182 + result.response = JSON.parse(resultRes.body);
144 183
145 } 184 }
146 185
@@ -193,40 +232,65 @@ connection.requestJsonToD01 = async function (obj,cmd,myMethod) { @@ -193,40 +232,65 @@ connection.requestJsonToD01 = async function (obj,cmd,myMethod) {
193 }; 232 };
194 233
195 234
196 -async function parallelRequest(multiParams,cmd,node) 235 +async function parallelRequest(multiParams,objectData,funStat)
197 { 236 {
198 237
199 var promises = []; 238 var promises = [];
200 239
201 for(var i=0;i<multiParams.length;i++) 240 for(var i=0;i<multiParams.length;i++)
202 - promises.push(asyncRequest (multiParams[i],cmd,node)); 241 + promises.push(asyncRequest (multiParams[i],objectData,funStat));
203 242
204 var res = await Promise.all(promises); 243 var res = await Promise.all(promises);
205 - for(var i=0;i<res.length;i++)  
206 - {  
207 - if(!res[i].err)  
208 - stats.receiveResponse(node,cmd,"Success"); 244 + // for(var i=0;i<res.length;i++)
  245 + // {
  246 + // if(!res[i].err)
  247 + // stats.receiveResponse(node,cmd,"Success");
209 248
210 - } 249 + // }
211 250
212 251
213 return res; 252 return res;
214 } 253 }
215 254
216 -function asyncRequest (params = {},cmd,node) { 255 +function asyncRequest (params = {},objectData,funStat) {
  256 +
  257 + // console.log(objectData);
  258 + funStat.start();
217 259
218 // console.log("Start : "+new Date().toISOString()); 260 // console.log("Start : "+new Date().toISOString());
219 return new Promise((resolve, reject) => { 261 return new Promise((resolve, reject) => {
220 request(params, function (error, response, body) { 262 request(params, function (error, response, body) {
221 263
222 if (error) { 264 if (error) {
  265 +
  266 + if( objectData.maxRetry == objectData.curRetry-1)
  267 + {
  268 + resolve({
  269 + 'body' : body,
  270 + 'err' : error
  271 + });
  272 + }else
  273 + {
  274 + var errRes = {};
  275 + if(error.code == 'ETIMEDOUT'){
  276 + errRes.resultCode = "50003";
  277 + errRes.resultDescription = "Timeout";
  278 + } else if(error.code == 'ECONNREFUSED'){
  279 + errRes.resultCode = "50002";
  280 + errRes.resultDescription = "Reject";
  281 + } else {
  282 + errRes.resultCode = "50000";
  283 + errRes.resultDescription = "System error";
  284 + }
  285 +
  286 + // console.log("retry "+objectData.curRetry);
  287 + funStat.error(errRes);
  288 + objectData.curRetry++;
  289 + resolve(asyncRequest(params,objectData,funStat));
  290 + }
223 291
224 - // console.log("End : "+new Date().toISOString());  
225 - console.log(error.code);  
226 - resolve({  
227 - 'body' : body,  
228 - 'err' : error  
229 - }); 292 +
  293 +
230 } else { 294 } else {
231 295
232 // stats.receiveResponse(node,cmd,"Success"); 296 // stats.receiveResponse(node,cmd,"Success");