Commit c4a567d009fbbfd669d02bfd5c614df842d3bae9

Authored by sumatek
1 parent 27aed231
Exists in master and in 1 other branch dev

merge

ais-structure/config.txt 0 → 100644
@@ -0,0 +1,74 @@ @@ -0,0 +1,74 @@
  1 +{
  2 + "development": {
  3 + "app_name": "CMF",
  4 + "app_host": "0.0.0.0",
  5 + "app_port": "3000",
  6 + "app_https": false,
  7 + "KEY": "key1.pem",
  8 + "CERT": "cert1.pem",
  9 + "service": {
  10 + "PANDORA": {
  11 + "URI": "http://25.27.7.151:34680",
  12 + "URI_EQX": "http://25.27.7.151:15300",
  13 + "KEY": "./PANDORA_CERT/server.key",
  14 + "CERT": "./PANDORA_CERT/server.pem",
  15 + "PREFIX": "/phxPartner/v1/partner"
  16 + },
  17 + "SACF": {
  18 + "Name": "SACF",
  19 + "POST_SearchCustomer_URL": "http://10.1.3.74:8080",
  20 + "POST_SearchCustomer_Timeout": 10
  21 + },
  22 + "D01": {
  23 + "Name": "D01",
  24 + "GET_Customer_URL": "http://localhost:8080",
  25 + "GET_Customer_Timeout": 10,
  26 + "POST_Customer_URL": "http://localhost:8080",
  27 + "POST_Customer_Timeout": 10,
  28 + "POST_Limit": 20,
  29 + "GET_Limit": 1000
  30 + },
  31 + "CMF": {
  32 + "Name": "CMF",
  33 + "GET_VIZCard_URL": [
  34 + "/cmf/v1/vizcards/:vizCardId",
  35 + "/cmf/v1/vizcards"
  36 + ],
  37 + "GET_Customer_URL": [
  38 + "/cmf/v1/customers/:customerId",
  39 + "/cmf/v1/customers/:userType/:userData",
  40 + "/cmf/v1/customers"
  41 + ],
  42 + "POST_Customer_URL": [
  43 + "/cmf/v1/customers"
  44 + ],
  45 + "GET_CustomerMembership_URL": [
  46 + "/cmf/v1/customers/:customerId/membercards",
  47 + "/cmf/v1/customers/:userType/:userData/membercards",
  48 + "/cmf/v1/customers/membercards"
  49 + ],
  50 + "POST_CustomerMembership_URL": [
  51 + "/cmf/v1/customers/:customerId/membercards",
  52 + "/cmf/v1/customers/:userType/:userData/membercards"
  53 + ]
  54 + }
  55 + },
  56 + "log": {
  57 + "logTime": 15,
  58 + "statTime": 2,
  59 + "detailTime": 15,
  60 + "summaryTime": 15,
  61 + "statInterval": 60,
  62 + "appLogPath": "./logTest/",
  63 + "summaryPath": "./logTest/",
  64 + "statPath": "./logTest/",
  65 + "detailPath": "./logTest/",
  66 + "level": "debug"
  67 + },
  68 + "http_req_timeout": 120,
  69 + "session": 30,
  70 + "Default_Timeout": 10,
  71 + "Default_Retry": 5,
  72 + "Uri_length": 1000
  73 + }
  74 +}
0 \ No newline at end of file 75 \ No newline at end of file
ais-structure/src/config/express.js
@@ -160,6 +160,7 @@ module.exports = function () { @@ -160,6 +160,7 @@ module.exports = function () {
160 var headerLog = 'IP|'+remoteIp+'|USER|'+username+'|REQUESTID|'+req.id; 160 var headerLog = 'IP|'+remoteIp+'|USER|'+username+'|REQUESTID|'+req.id;
161 161
162 logger.setHeader(headerLog); 162 logger.setHeader(headerLog);
  163 + // console.log(headerLog);
163 // console.log("req " +req.headers['x-token']); 164 // console.log("req " +req.headers['x-token']);
164 // console.log("fullUrl " +req.originalUrl); 165 // console.log("fullUrl " +req.originalUrl);
165 // console.log("method " +req.method); 166 // console.log("method " +req.method);
@@ -209,10 +210,7 @@ module.exports = function () { @@ -209,10 +210,7 @@ module.exports = function () {
209 return res.resBody?res.resBody:'' ; 210 return res.resBody?res.resBody:'' ;
210 }) 211 })
211 212
212 - app.use( function( req, res, next ) {  
213 - log.startEC(req);  
214 - next();  
215 -} ); 213 +
216 214
217 // app.use(morgan('IP|:remote-ip|USER|:user-id|REQUESTID|:id|METHOD|:method|URI|:uri|REQUESTBODY|:json|RESPSTATUS|:status|RESPBODY|:resp-body|RESPTIME|:response-time', { 215 // app.use(morgan('IP|:remote-ip|USER|:user-id|REQUESTID|:id|METHOD|:method|URI|:uri|REQUESTBODY|:json|RESPSTATUS|:status|RESPBODY|:resp-body|RESPTIME|:response-time', {
218 // "stream": logger.stream 216 // "stream": logger.stream
@@ -223,6 +221,13 @@ module.exports = function () { @@ -223,6 +221,13 @@ module.exports = function () {
223 // var ALL_ROUTES = require('../routes/index').GET_ALL_ROUTES(); 221 // var ALL_ROUTES = require('../routes/index').GET_ALL_ROUTES();
224 // app.use('/', ALL_ROUTES); 222 // app.use('/', ALL_ROUTES);
225 223
  224 + app.use( function( req, res, next ) {
  225 + // console.log(req.id);
  226 + log.startEC(req);
  227 + next();
  228 + });
  229 +
  230 +
226 logger.info("load module"); 231 logger.info("load module");
227 var load = require('express-load'); 232 var load = require('express-load');
228 // load('modules', { 233 // load('modules', {
@@ -274,19 +279,20 @@ module.exports = function () { @@ -274,19 +279,20 @@ module.exports = function () {
274 /* ------------- [END NOT MATCH ROUTE - 404 ] ------------ */ 279 /* ------------- [END NOT MATCH ROUTE - 404 ] ------------ */
275 280
276 app.use( function( req, res, next ) { 281 app.use( function( req, res, next ) {
277 - // console.log("end");  
278 - // console.log(req.res.resBody);  
279 - if(req.res.resBody)  
280 - {  
281 - log.logSummary(JSON.parse(req.res.resBody));  
282 - }else  
283 - {  
284 - res.status(200).json(responseMsg.unknow(req));  
285 - }  
286 -  
287 - log.endEC(res);  
288 - next();  
289 -} ); 282 + // console.log("end");
  283 + // console.log(req.res.resBody);
  284 + if(req.res.resBody)
  285 + {
  286 + log.logSummary(req,JSON.parse(req.res.resBody));
  287 + }else
  288 + {
  289 + res.status(200).json(responseMsg.unknow(req));
  290 + }
  291 +
  292 + log.endEC(req,res);
  293 + next();
  294 + } );
  295 +
290 296
291 return app; 297 return app;
292 }; 298 };
ais-structure/src/modules/customer/customer.ctrl.js
@@ -10,7 +10,6 @@ exports.customer = async function (req, res, next) { @@ -10,7 +10,6 @@ exports.customer = async function (req, res, next) {
10 var sendCmd = "Customer"; 10 var sendCmd = "Customer";
11 var d01 = "D01" 11 var d01 = "D01"
12 var method = constant.METHOD.GET 12 var method = constant.METHOD.GET
13 -  
14 console.log(req.params); 13 console.log(req.params);
15 14
16 if(req.params.customerId){ 15 if(req.params.customerId){
@@ -20,25 +19,26 @@ exports.customer = async function (req, res, next) { @@ -20,25 +19,26 @@ exports.customer = async function (req, res, next) {
20 } else if(req.query.clientName && req.query.commandId){ 19 } else if(req.query.clientName && req.query.commandId){
21 var customerId = req.query.clientName+"@"+req.query.commandId; 20 var customerId = req.query.clientName+"@"+req.query.commandId;
22 } 21 }
  22 +;
23 23
24 - log.startlog(method+"_"+getCmd,req.query.commandId,customerId);  
25 - log.logDetail.addInput(req.query.clientName,method+"_"+getCmd,constant.REQUEST,req,req.body); 24 + log.startlog(req,method+"_"+getCmd,req.query.commandId,customerId);
  25 + log.logDetail.addInput(req,req.query.clientName,method+"_"+getCmd,constant.REQUEST,req,req.body);
26 26
27 var err = validator(req,getCmd); 27 var err = validator(req,getCmd);
28 28
29 if(err.length > 0) 29 if(err.length > 0)
30 { 30 {
31 - log.addErrorSummary(req.query.clientName,method+"_"+getCmd,"null",constant.FAIL); 31 + log.addErrorSummary(req,req.query.clientName,method+"_"+getCmd,"null",constant.FAIL);
32 log.log(err,'error'); 32 log.log(err,'error');
33 var response = responseMsg.error(req,getCmd,40300); 33 var response = responseMsg.error(req,getCmd,40300);
34 // res.status(200).json(response); 34 // res.status(200).json(response);
35 }else 35 }else
36 { 36 {
37 - log.addSuccessSummary(req.query.clientName,method+"_"+getCmd,"null",constant.SUCCESS); 37 + log.addSuccessSummary(req,req.query.clientName,method+"_"+getCmd,"null",constant.SUCCESS);
38 var objectData = Object.assign(req.query,req.params); 38 var objectData = Object.assign(req.query,req.params);
39 - const result = await connection.requestJsonToD01(objectData,sendCmd,method); 39 + const result = await connection.requestJsonToD01(req,objectData,sendCmd,method);
40 // console.log(Object.keys(result)) 40 // console.log(Object.keys(result))
41 - log.logDetail.addInput(d01,method+"_"+sendCmd,constant.RESPONSE,result,result.response); 41 + log.logDetail.addInput(req,d01,method+"_"+sendCmd,constant.RESPONSE,result,result.response);
42 if(typeof result.err === 'undefined'){ 42 if(typeof result.err === 'undefined'){
43 // console.log(result.response); 43 // console.log(result.response);
44 var resultObj = result.response; 44 var resultObj = result.response;
@@ -48,21 +48,21 @@ exports.customer = async function (req, res, next) { @@ -48,21 +48,21 @@ exports.customer = async function (req, res, next) {
48 { 48 {
49 stats.receiveRestResponse(d01,method,sendCmd,constant.SUCCESS); 49 stats.receiveRestResponse(d01,method,sendCmd,constant.SUCCESS);
50 var response = responseMsg.success(req,getCmd,resultObj); 50 var response = responseMsg.success(req,getCmd,resultObj);
51 - log.addSuccessSummary(d01,method+"_"+sendCmd,response.resultCode,response.developerMessage); 51 + log.addSuccessSummary(req,d01,method+"_"+sendCmd,response.resultCode,response.developerMessage);
52 }else 52 }else
53 { 53 {
54 stats.receiveRestResponse(d01,method,sendCmd,constant.RESPONSERESULT.DATA_NOT_FOUND.developerMessage); 54 stats.receiveRestResponse(d01,method,sendCmd,constant.RESPONSERESULT.DATA_NOT_FOUND.developerMessage);
55 var response = responseMsg.error(req,getCmd,40401); 55 var response = responseMsg.error(req,getCmd,40401);
56 - log.addErrorSummary(d01,method+"_"+sendCmd,response.resultCode,response.developerMessage); 56 + log.addErrorSummary(req,d01,method+"_"+sendCmd,response.resultCode,response.developerMessage);
57 } 57 }
58 } else if(resultObj.resultCode.startsWith("404")){ 58 } else if(resultObj.resultCode.startsWith("404")){
59 stats.receiveRestResponse(d01,method,sendCmd,constant.RESPONSERESULT.DATA_NOT_FOUND.developerMessage); 59 stats.receiveRestResponse(d01,method,sendCmd,constant.RESPONSERESULT.DATA_NOT_FOUND.developerMessage);
60 var response = responseMsg.direct(req,getCmd,resultObj); 60 var response = responseMsg.direct(req,getCmd,resultObj);
61 - log.addErrorSummary(d01,method+"_"+sendCmd,resultObj.resultCode,resultObj.developerMessage); 61 + log.addErrorSummary(req,d01,method+"_"+sendCmd,resultObj.resultCode,resultObj.developerMessage);
62 } else if(resultObj.resultCode.startsWith("5")){ 62 } else if(resultObj.resultCode.startsWith("5")){
63 stats.receiveRestResponse(d01,method,sendCmd,constant.ERROR); 63 stats.receiveRestResponse(d01,method,sendCmd,constant.ERROR);
64 var response = responseMsg.direct(req,getCmd,resultObj); 64 var response = responseMsg.direct(req,getCmd,resultObj);
65 - log.addErrorSummary(d01,method+"_"+sendCmd,resultObj.resultCode,resultObj.developerMessage); 65 + log.addErrorSummary(req,d01,method+"_"+sendCmd,resultObj.resultCode,resultObj.developerMessage);
66 } else { 66 } else {
67 stats.receiveRestResponse(d01,method,sendCmd,constant.ERROR); 67 stats.receiveRestResponse(d01,method,sendCmd,constant.ERROR);
68 var response = responseMsg.error(req,getCmd,50000); 68 var response = responseMsg.error(req,getCmd,50000);
@@ -74,7 +74,7 @@ exports.customer = async function (req, res, next) { @@ -74,7 +74,7 @@ exports.customer = async function (req, res, next) {
74 } 74 }
75 } 75 }
76 76
77 - log.logDetail.addOutput(req.query.clientName,method+"_"+getCmd,constant.RESPONSE,response,response); 77 + log.logDetail.addOutput(req,req.query.clientName,method+"_"+getCmd,constant.RESPONSE,response,response);
78 res.status(200).json(response); 78 res.status(200).json(response);
79 next(); 79 next();
80 }; 80 };
ais-structure/src/modules/customer/customer.route.js
@@ -5,19 +5,19 @@ module.exports = function (app) { @@ -5,19 +5,19 @@ module.exports = function (app) {
5 var customerCtrl = app.modules.customer.customerCtrl; 5 var customerCtrl = app.modules.customer.customerCtrl;
6 var postCustomerCtrl = app.modules.customer.postCustomerCtrl; 6 var postCustomerCtrl = app.modules.customer.postCustomerCtrl;
7 7
8 - app.get(cfg.service.CMF.GET_Customer_URL[0],  
9 - customerCtrl.customer  
10 - ); 8 + // app.get(cfg.service.CMF.GET_Customer_URL[0],
  9 + // customerCtrl.customer
  10 + // );
11 11
12 - app.get(cfg.service.CMF.GET_Customer_URL[1],  
13 - customerCtrl.customer  
14 - ); 12 + // app.get(cfg.service.CMF.GET_Customer_URL[1],
  13 + // customerCtrl.customer
  14 + // );
15 15
16 - app.get(cfg.service.CMF.GET_Customer_URL[2],  
17 - customerCtrl.customer  
18 - ); 16 + // app.get(cfg.service.CMF.GET_Customer_URL[2],
  17 + // customerCtrl.customer
  18 + // );
19 19
20 - app.post(cfg.service.CMF.POST_Customer_URL[0],  
21 - postCustomerCtrl.postCustomer  
22 - ); 20 + // app.post(cfg.service.CMF.POST_Customer_URL[0],
  21 + // postCustomerCtrl.postCustomer
  22 + // );
23 }; 23 };
ais-structure/src/modules/helper/connection.js
@@ -9,194 +9,206 @@ var constants = require('../helper/constants.js'); @@ -9,194 +9,206 @@ var constants = require('../helper/constants.js');
9 var connection = []; 9 var connection = [];
10 10
11 11
12 -connection.requestSoapToSACF = async function (soap,cmd,myMethod) { 12 +connection.requestSoapToSACF = async function (req,soap,cmd,myMethod) {
  13 + try {
  14 + log.log("Connect to SACF")
  15 +
  16 + var service = cfg.service.SACF;
  17 + var retry = service[myMethod+"_"+cmd+"_Retry"];
  18 +
  19 + var params = {
  20 + url : service[myMethod+"_"+cmd+"_URL"],
  21 + body : messageSOAP.objectToSOAP(soap,cmd),
  22 + method : myMethod,
  23 + timeout : cfg.service.SACF[myMethod+"_"+cmd+"_Timeout"]*1000
  24 + }
13 25
14 - log.log("Connect to SACF") 26 + log.log("requestData : "+JSON.stringify(params))
15 27
16 - var service = cfg.service.SACF;  
17 - var retry = service[myMethod+"_"+cmd+"_Retry"]; 28 + if(!retry)
  29 + retry = cfg.Default_Retry;
18 30
19 - var params = {  
20 - url : service[myMethod+"_"+cmd+"_URL"],  
21 - body : messageSOAP.objectToSOAP(soap,cmd),  
22 - method : myMethod,  
23 - timeout : cfg.service.SACF[myMethod+"_"+cmd+"_Timeout"]*1000  
24 - } 31 + var objectData = {
  32 + maxRetry : retry,
  33 + curRetry : 1
  34 + }
  35 +
  36 + var funS = function(){
  37 + stats.sendSACFRequest(service.Name,cmd);
  38 + log.logDetail.addOutput(req,service.Name,myMethod+"_"+cmd,constants.REQUEST,params,soap);
  39 + };
  40 +
  41 + var funStats = {
  42 + start : funS,
  43 + error : function(response){log.addErrorSummary(req,service.Name,myMethod+"_"+cmd,response.resultCode,response.resultDescription);}
  44 + };
25 45
26 - log.log(JSON.stringify(params))  
27 46
28 - if(!retry)  
29 - retry = cfg.Default_Retry; 47 + var result = await asyncRequest(params,objectData,funStats);
30 48
31 - var objectData = {  
32 - maxRetry : retry,  
33 - curRetry : 1 49 + return checkResponse(result,funStats);
34 } 50 }
35 -  
36 - var funS = function(){  
37 - stats.sendSACFRequest(service.Name,cmd);  
38 - log.logDetail.addOutput(service.Name,myMethod+"_"+cmd,constants.REQUEST,params,soap);  
39 - };  
40 -  
41 - var funStats = {  
42 - start : funS,  
43 - error : function(response){log.addErrorSummary(service.Name,myMethod+"_"+cmd,response.resultCode,response.resultDescription);}  
44 - };  
45 - 51 + catch(err) {
  52 + log.log(err);
46 53
47 - var result = await asyncRequest(params,objectData,funStats); 54 + var result = {
  55 + response : constants.RESPONSECONN.MESSAGE.ERROR
  56 + };
  57 + return result;
48 58
49 - return checkResponse(result,funStats); 59 + }
50 }; 60 };
51 61
52 -connection.requestJsonToD01 = async function (obj,cmd,myMethod) {  
53 -  
54 - log.log("Connect to D01")  
55 -  
56 - var service = cfg.service.D01;  
57 - var retry = service[myMethod+"_"+cmd+"_Retry"];  
58 - if(!retry)  
59 - retry = cfg.Default_Retry; 62 +connection.requestJsonToD01 = async function (req,obj,cmd,myMethod) {
  63 + try {
  64 +
  65 + log.log("Connect to D01")
60 66
61 - var objectData = {  
62 - maxRetry : retry,  
63 - curRetry : 1  
64 - } 67 + var service = cfg.service.D01;
  68 + var retry = service[myMethod+"_"+cmd+"_Retry"];
  69 + if(!retry)
  70 + retry = cfg.Default_Retry;
65 71
66 - // JSON.stringify(json)  
67 - var params = {  
68 - url : service[myMethod+"_"+cmd+"_URL"],  
69 - body : obj,  
70 - method : myMethod,  
71 - timeout : service[myMethod+"_"+cmd+"_Timeout"]*1000  
72 - } 72 + var objectData = {
  73 + maxRetry : retry,
  74 + curRetry : 1
  75 + }
73 76
74 - log.log(JSON.stringify(params)) 77 + // JSON.stringify(json)
  78 + var params = {
  79 + url : service[myMethod+"_"+cmd+"_URL"],
  80 + body : obj,
  81 + method : myMethod,
  82 + timeout : service[myMethod+"_"+cmd+"_Timeout"]*1000
  83 + }
75 84
76 - var funStats = function(){  
77 - stats.sendRestRequest(service.Name,myMethod,cmd);  
78 - log.logDetail.addOutput(service.Name,myMethod+"_"+cmd,constants.Request,params,obj);  
79 - };  
80 -  
81 - var funStats = {  
82 - start : funStats,  
83 - error : function(response){log.addErrorSummary(service.Name,myMethod+"_"+cmd,response.resultCode,response.resultDescription);}  
84 - }; 85 + log.log("requestData : "+JSON.stringify(params))
85 86
86 - 87 + var funStats = function(){
  88 + stats.sendRestRequest(service.Name,myMethod,cmd);
  89 + log.logDetail.addOutput(req,service.Name,myMethod+"_"+cmd,constants.Request,params,obj);
  90 + };
  91 +
  92 + var funStats = {
  93 + start : funStats,
  94 + error : function(response){log.addErrorSummary(req,service.Name,myMethod+"_"+cmd,response.resultCode,response.resultDescription);}
  95 + };
87 96
88 - var result = {};  
89 - result.response = {};  
90 - result.response.resultData = []; 97 +
91 98
92 - 99 + var result = {};
  100 + result.response = {};
  101 + result.response.resultData = [];
93 102
94 - if(params.method == constants.METHOD.GET)  
95 - {  
96 - var genUrl = getUrl(params,service["searchRecordLimit"]);  
97 - if(genUrl.length > 1)  
98 - {  
99 - console.log("multi Send");  
100 - var multiSend = [];  
101 - for(var i=0;i<genUrl.length;i++)  
102 - multiSend.push({url:genUrl[i],method:params.method});  
103 103
104 - var parallelRes = await parallelRequest(multiSend,objectData,funStats);  
105 104
106 - var dataRes = {};  
107 - for(var i=0;i<multiSend.length;i++) 105 + if(params.method == constants.METHOD.GET)
  106 + {
  107 + var genUrl = getUrl(params,service["searchRecordLimit"]);
  108 + if(genUrl.length > 1)
108 { 109 {
109 - // console.log("start loop");  
110 - var loopRes = parallelRes[i];  
111 -  
112 - if(loopRes.response) 110 + console.log("multi Send");
  111 + var multiSend = [];
  112 + for(var i=0;i<genUrl.length;i++)
  113 + multiSend.push({url:genUrl[i],method:params.method});
  114 +
  115 + var parallelRes = await parallelRequest(multiSend,objectData,funStats);
  116 +
  117 + var dataRes = {};
  118 + for(var i=0;i<multiSend.length;i++)
113 { 119 {
114 - var data = JSON.parse(loopRes.response.body);  
115 - dataRes[i] = {}; 120 + // console.log("start loop");
  121 + var loopRes = parallelRes[i];
  122 +
  123 + if(loopRes.response)
  124 + {
  125 + var data = JSON.parse(loopRes.response.body);
  126 + dataRes[i] = {};
116 127
117 - if(!data.resultCode)  
118 - dataRes[i].err = "Miss resultCode"; 128 + if(!data.resultCode)
  129 + dataRes[i].err = "Miss resultCode";
119 130
120 - if(!data.resultDescription)  
121 - dataRes[i].err = "Miss resultDescription" 131 + if(!data.resultDescription)
  132 + dataRes[i].err = "Miss resultDescription"
122 133
  134 +
  135 + dataRes[i].data = data.resultData;
123 136
124 - dataRes[i].data = data.resultData;  
125 - 137 + }
  138 +
126 } 139 }
127 140
128 - } 141 + for (var i = 0; i < multiSend.length; i++) {
  142 +
  143 + result.response.resultData = result.response.resultData.concat(dataRes[i].data);
  144 + if(dataRes[i].err)
  145 + result.err = dataRes[i].err;
  146 + }
129 147
130 - for (var i = 0; i < multiSend.length; i++) {  
131 -  
132 - result.response.resultData = result.response.resultData.concat(dataRes[i].data);  
133 - if(dataRes[i].err)  
134 - result.err = dataRes[i].err;  
135 - } 148 + if(!result.err)
  149 + {
  150 + result.response = constants.RESPONSECONN.MESSAGE.SUCCESS;
  151 + // result.response.resultCode = "20000";
  152 + // result.response.developerMessage = "Success";
  153 + }
136 154
137 - if(!result.err) 155 +
  156 + }else
138 { 157 {
139 - result.response = constants.RESPONSECONN.MESSAGE.SUCCESS;  
140 - // result.response.resultCode = "20000";  
141 - // result.response.developerMessage = "Success"; 158 + // console.log("single Send");
  159 + params.url = genUrl[0];
  160 + delete params.body;
  161 +
  162 + var resultRes = await asyncRequest(params,objectData,funStats);
  163 +
  164 + // console.log(resultRes);
  165 + if(resultRes.response)
  166 + {
  167 + var data = JSON.parse(resultRes.response.body);
  168 + result.response = data;
  169 +
  170 + } else {
  171 + result = resultRes;
  172 + }
142 } 173 }
143 174
144 175
145 - }else 176 + }else if(params.method == constants.METHOD.POST)
146 { 177 {
147 - // console.log("single Send");  
148 - params.url = genUrl[0];  
149 - delete params.body; 178 + params.body = JSON.stringify(params.body);
150 179
151 var resultRes = await asyncRequest(params,objectData,funStats); 180 var resultRes = await asyncRequest(params,objectData,funStats);
152 181
153 - // console.log(resultRes);  
154 - if(resultRes.response)  
155 - {  
156 - var data = JSON.parse(resultRes.response.body);  
157 - result.response = data;  
158 - 182 + if(resultRes.response){
  183 + result.response = JSON.parse(resultRes.body);
159 } else { 184 } else {
160 result = resultRes; 185 result = resultRes;
161 } 186 }
162 } 187 }
163 188
  189 + // console.log(result);
164 190
165 - } else if(params.method == constants.METHOD.POST){  
166 - params.body = JSON.stringify(params.body);  
167 -  
168 - var resultRes = await asyncRequest(params,objectData,funStats);  
169 -  
170 - if(resultRes.response){  
171 - result.response = JSON.parse(resultRes.body);  
172 - } else {  
173 - result = resultRes; 191 + if(result.response)
  192 + {
  193 + if(!result.response.resultCode){
  194 + result.err = "Missing resultCode";
  195 + } else if(!result.response.resultDescription){
  196 + result.err = "Missing resultDescription";
  197 + }
174 } 198 }
175 - } else if(params.method == constants.METHOD.PUT){  
176 -  
177 - params.body = JSON.stringify(params.body);  
178 199
179 - var resultRes = await asyncRequest(params,objectData,funStats); 200 + return checkResponse(result,funStats);
180 201
181 - if(resultRes.response){  
182 - result.response = JSON.parse(resultRes.body);  
183 - } else {  
184 - result = resultRes;  
185 - }  
186 } 202 }
  203 + catch(err) {
  204 + log.log(err);
187 205
188 - // console.log(result);  
189 -  
190 - if(result.response)  
191 - {  
192 - if(!result.response.resultCode){  
193 - result.err = "Missing resultCode";  
194 - } else if(!result.response.resultDescription){  
195 - result.err = "Missing resultDescription";  
196 - }  
197 - } 206 + var result = {
  207 + response : constants.RESPONSECONN.MESSAGE.ERROR
  208 + };
  209 + return result;
198 210
199 - return checkResponse(result,funStats); 211 + }
200 }; 212 };
201 213
202 214
@@ -241,21 +253,17 @@ function asyncRequest (params = {},objectData,funStat) { @@ -241,21 +253,17 @@ function asyncRequest (params = {},objectData,funStat) {
241 }else 253 }else
242 { 254 {
243 var errRes = {}; 255 var errRes = {};
244 - if(error.code == 'ETIMEDOUT'){  
245 - // errRes.resultCode = "50003";  
246 - // errRes.resultDescription = "Timeout";  
247 - errRes.resultCode = "50000";  
248 - errRes.resultDescription = "System error";  
249 - } else if(error.code == 'ECONNREFUSED'){  
250 - // errRes.resultCode = "50002";  
251 - // errRes.resultDescription = "Reject";  
252 - errRes.resultCode = "50000";  
253 - errRes.resultDescription = "System error"; 256 + log.log(error,'error');
  257 + if(error.code == constants.RESPONSECONN.STATS.ETIMEDOUT){
  258 + errRes.response = constants.RESPONSECONN.MESSAGE.ETIMEDOUT;
  259 + } else if(error.code == constants.RESPONSECONN.STATS.ECONNREFUSED){
  260 + errRes.response = constants.RESPONSECONN.MESSAGE.ECONNREFUSED;
  261 + } else if(error.code == constants.RESPONSECONN.STATS.ESOCKETTIMEDOUT){
  262 + errRes.response = constants.RESPONSECONN.MESSAGE.ESOCKETTIMEDOUT;
254 } else { 263 } else {
255 - errRes.resultCode = "50000";  
256 - errRes.resultDescription = "System error"; 264 + errRes.response = constants.RESPONSECONN.MESSAGE.ERROR;
257 } 265 }
258 - 266 +
259 // console.log("retry "+objectData.curRetry); 267 // console.log("retry "+objectData.curRetry);
260 funStat.error(errRes); 268 funStat.error(errRes);
261 objectData.curRetry++; 269 objectData.curRetry++;
@@ -374,7 +382,8 @@ function getUrl(params,limit) @@ -374,7 +382,8 @@ function getUrl(params,limit)
374 // console.log(filter); 382 // console.log(filter);
375 // console.log(fields); 383 // console.log(fields);
376 384
377 - console.log(returnData); 385 + for(var i=0;i<returnData.length;i++)
  386 + console.log("URL "+[i+1]+" : "+returnData[i]);
378 387
379 return returnData; 388 return returnData;
380 } 389 }
@@ -483,9 +492,8 @@ function checkResponse(result,funStats) @@ -483,9 +492,8 @@ function checkResponse(result,funStats)
483 } 492 }
484 } 493 }
485 funStats.error(result.response) 494 funStats.error(result.response)
486 - }  
487 -  
488 - log.log(JSON.stringify(result)); 495 + }else
  496 + log.log(JSON.stringify(result));
489 497
490 return result; 498 return result;
491 } 499 }
ais-structure/src/modules/helper/log.js
@@ -6,15 +6,30 @@ conf.log = cfg.log; @@ -6,15 +6,30 @@ conf.log = cfg.log;
6 conf.log.projectName = cfg.app_name; 6 conf.log.projectName = cfg.app_name;
7 7
8 var logg = require('commonlog-kb').init(conf); 8 var logg = require('commonlog-kb').init(conf);
  9 +var logger = [];
  10 +
  11 +
  12 +// var summaryList = [];
  13 +// var start = {};
  14 +// var detail = {};
  15 +// var startTime;
  16 +
  17 +var mapLog = {};
9 18
10 -// wait log stats  
11 -// logg.stat('stat_name');  
12 19
13 -var logger = [];  
14 -var summaryList = [];  
15 -var start = {};  
16 -var detail = {};  
17 -var startTime; 20 +
  21 +logger.startlog = function (req,cmdData,session,identity)
  22 +{
  23 +
  24 +
  25 + var start = {
  26 + session : session,
  27 + cmd : cmdData,
  28 + identity : identity
  29 + };
  30 +
  31 + mapLog[req.id].start = start;
  32 +}
18 33
19 logger.stat = function (msg){ 34 logger.stat = function (msg){
20 logg.stat(msg); 35 logg.stat(msg);
@@ -48,16 +63,8 @@ logger.log = function (msg,type) @@ -48,16 +63,8 @@ logger.log = function (msg,type)
48 console.log(msg); 63 console.log(msg);
49 } 64 }
50 65
51 -logger.startlog = function (cmdData,session,identity)  
52 -{  
53 - start = {  
54 - session : session,  
55 - cmd : cmdData,  
56 - identity : identity  
57 - };  
58 -}  
59 66
60 -logger.addSuccessSummary = function (nodeData,cmdData,resultCode,developerMessage) 67 +logger.addSuccessSummary = function (req,nodeData,cmdData,resultCode,developerMessage)
61 { 68 {
62 summary = { 69 summary = {
63 node : undefinedToNull(nodeData), 70 node : undefinedToNull(nodeData),
@@ -66,11 +73,12 @@ logger.addSuccessSummary = function (nodeData,cmdData,resultCode,developerMessag @@ -66,11 +73,12 @@ logger.addSuccessSummary = function (nodeData,cmdData,resultCode,developerMessag
66 resultDesc : developerMessage, 73 resultDesc : developerMessage,
67 type : "success" 74 type : "success"
68 }; 75 };
69 - summaryList.push(summary); 76 + mapLog[req.id].summaryList.push(summary);
  77 + // summaryList.push(summary);
70 // console.log(summary); 78 // console.log(summary);
71 } 79 }
72 80
73 -logger.addErrorSummary = function (nodeData,cmdData,resultCode,developerMessage) 81 +logger.addErrorSummary = function (req,nodeData,cmdData,resultCode,developerMessage)
74 { 82 {
75 summary = { 83 summary = {
76 node : undefinedToNull(nodeData), 84 node : undefinedToNull(nodeData),
@@ -79,12 +87,18 @@ logger.addErrorSummary = function (nodeData,cmdData,resultCode,developerMessage) @@ -79,12 +87,18 @@ logger.addErrorSummary = function (nodeData,cmdData,resultCode,developerMessage)
79 resultDesc : developerMessage, 87 resultDesc : developerMessage,
80 type : "error" 88 type : "error"
81 }; 89 };
82 - summaryList.push(summary); 90 + // console.log(mapLog);
  91 + mapLog[req.id].summaryList.push(summary);
  92 + // summaryList.push(summary);
83 // console.log(summary); 93 // console.log(summary);
84 } 94 }
85 95
86 -logger.logSummary = function (response) 96 +logger.logSummary = function (req,response)
87 { 97 {
  98 +
  99 + var start = mapLog[req.id].start;
  100 + var summaryList = mapLog[req.id].summaryList;
  101 +
88 var log = logg.summary(start.session,start.cmd,start.identity); 102 var log = logg.summary(start.session,start.cmd,start.identity);
89 var row; 103 var row;
90 for (let index = 0; index < summaryList.length; index++) { 104 for (let index = 0; index < summaryList.length; index++) {
@@ -103,7 +117,7 @@ logger.logSummary = function (response) @@ -103,7 +117,7 @@ logger.logSummary = function (response)
103 } 117 }
104 } 118 }
105 119
106 -var addlogDetailData = function(inputType,node,cmd,type,rawData,data){ 120 +var addlogDetailData = function(req,inputType,node,cmd,type,rawData,data){
107 if(inputType == 'input') 121 if(inputType == 'input')
108 { 122 {
109 if(rawData) 123 if(rawData)
@@ -119,7 +133,7 @@ var addlogDetailData = function(inputType,node,cmd,type,rawData,data){ @@ -119,7 +133,7 @@ var addlogDetailData = function(inputType,node,cmd,type,rawData,data){
119 }; 133 };
120 } 134 }
121 135
122 - detail.input = { 136 + mapLog[req.id].detail.input = {
123 node : undefinedToNull(node), 137 node : undefinedToNull(node),
124 cmd : cmd, 138 cmd : cmd,
125 type : type, 139 type : type,
@@ -127,11 +141,13 @@ var addlogDetailData = function(inputType,node,cmd,type,rawData,data){ @@ -127,11 +141,13 @@ var addlogDetailData = function(inputType,node,cmd,type,rawData,data){
127 data : data 141 data : data
128 }; 142 };
129 143
  144 +
130 // console.log(detail.input); 145 // console.log(detail.input);
131 } 146 }
132 else if(inputType == 'output') 147 else if(inputType == 'output')
133 { 148 {
134 - detail.output = { 149 +
  150 + mapLog[req.id].detail.output = {
135 node : undefinedToNull(node), 151 node : undefinedToNull(node),
136 cmd : cmd, 152 cmd : cmd,
137 type : type, 153 type : type,
@@ -139,6 +155,8 @@ var addlogDetailData = function(inputType,node,cmd,type,rawData,data){ @@ -139,6 +155,8 @@ var addlogDetailData = function(inputType,node,cmd,type,rawData,data){
139 data : data 155 data : data
140 }; 156 };
141 157
  158 + var start = mapLog[req.id].start;
  159 + var detail = mapLog[req.id].detail;
142 var log = logg.detail(start.session, start.cmd, start.identity); 160 var log = logg.detail(start.session, start.cmd, start.identity);
143 log.addInput( detail.input.node, detail.input.cmd, detail.input.type, detail.input.rawData, detail.input.data ); 161 log.addInput( detail.input.node, detail.input.cmd, detail.input.type, detail.input.rawData, detail.input.data );
144 log.addOutput( detail.output.node, detail.output.cmd, detail.output.type, detail.output.rawData, detail.output.data ); 162 log.addOutput( detail.output.node, detail.output.cmd, detail.output.type, detail.output.rawData, detail.output.data );
@@ -148,15 +166,9 @@ var addlogDetailData = function(inputType,node,cmd,type,rawData,data){ @@ -148,15 +166,9 @@ var addlogDetailData = function(inputType,node,cmd,type,rawData,data){
148 } 166 }
149 167
150 var logDetailData = { 168 var logDetailData = {
151 - addInput : function(node,cmd,type,rawData,data){addlogDetailData('input',node,cmd,type,rawData,data)},  
152 - addOutput : function(node,cmd,type,rawData,data){addlogDetailData('output',node,cmd,type,rawData,data)}  
153 - // write : function ()  
154 - // {  
155 - // var log = logg.detail(start.session, start.cmd, start.identity);  
156 - // log.addInput( detail.input.node, detail.input.cmd, detail.input.type, detail.input.rawData, detail.input.data );  
157 - // log.addOutput( detail.output.node, detail.output.cmd, detail.output.type, detail.output.rawData, detail.output.data );  
158 - // log.end();  
159 - // } 169 + addInput : function(req,node,cmd,type,rawData,data){addlogDetailData(req,'input',node,cmd,type,rawData,data)},
  170 + addOutput : function(req,node,cmd,type,rawData,data){addlogDetailData(req,'output',node,cmd,type,rawData,data)}
  171 +
160 }; 172 };
161 173
162 logger.logDetail = logDetailData; 174 logger.logDetail = logDetailData;
@@ -171,18 +183,23 @@ var undefinedToNull = function(data){ @@ -171,18 +183,23 @@ var undefinedToNull = function(data){
171 return data; 183 return data;
172 } 184 }
173 185
  186 +
  187 +
174 logger.startEC = function(req) 188 logger.startEC = function(req)
175 { 189 {
176 - var newLine = "\r\n";  
177 - var messageRes = '';  
178 - startTime = new Date(); 190 + var objectLog = {
  191 + summaryList : [],
  192 + start : {},
  193 + detail : {},
  194 + startTime : ""
  195 + }
179 196
180 - // if(!mapTime[req.headers.host])  
181 - // {  
182 - // mapTime[req.headers.host]  
183 - // }  
184 197
  198 + mapLog[req.id] = objectLog;
185 199
  200 + var newLine = "\r\n";
  201 + var messageRes = '';
  202 + startTime = new Date();
186 203
187 // console.log(Object.keys(req)); 204 // console.log(Object.keys(req));
188 // console.log(req.headers); 205 // console.log(req.headers);
@@ -206,21 +223,26 @@ logger.startEC = function(req) @@ -206,21 +223,26 @@ logger.startEC = function(req)
206 } 223 }
207 224
208 messageRes += newLine+newLine+"#====> Incoming Message <====# "; 225 messageRes += newLine+newLine+"#====> Incoming Message <====# ";
  226 + messageRes += newLine+"Session : "+req.id;
209 messageRes += newLine+"Header : "+header; 227 messageRes += newLine+"Header : "+header;
210 messageRes += newLine+"Body : "+body; 228 messageRes += newLine+"Body : "+body;
211 messageRes += newLine+"Time in : "+startTime.toISOString(); 229 messageRes += newLine+"Time in : "+startTime.toISOString();
212 messageRes += newLine 230 messageRes += newLine
213 231
214 - logger.log(messageRes); 232 + logg.debug(messageRes);
  233 + // logger.log(messageRes);
215 }; 234 };
216 235
217 -logger.endEC = function(res) 236 +logger.endEC = function(req,res)
218 { 237 {
219 238
220 var newLine = "\r\n"; 239 var newLine = "\r\n";
221 var messageRes = ''; 240 var messageRes = '';
  241 + var startTime = mapLog[req.id].startTime;
222 var endTime = new Date(); 242 var endTime = new Date();
  243 +
223 244
  245 + // console.log(mapLog);
224 246
225 var body = ""; 247 var body = "";
226 if(res.resBody) 248 if(res.resBody)
@@ -241,6 +263,7 @@ logger.endEC = function(res) @@ -241,6 +263,7 @@ logger.endEC = function(res)
241 } 263 }
242 264
243 messageRes += newLine+newLine+"#====> Outgoing Message <====# "; 265 messageRes += newLine+newLine+"#====> Outgoing Message <====# ";
  266 + messageRes += newLine+"Session : "+req.id;
244 messageRes += newLine+"Header : "+header; 267 messageRes += newLine+"Header : "+header;
245 messageRes += newLine+"Body : "+body; 268 messageRes += newLine+"Body : "+body;
246 messageRes += newLine+"Time out : "+endTime.toISOString(); 269 messageRes += newLine+"Time out : "+endTime.toISOString();
@@ -285,7 +308,8 @@ logger.endEC = function(res) @@ -285,7 +308,8 @@ logger.endEC = function(res)
285 // ________________________________________________________________________________________________________________________ 308 // ________________________________________________________________________________________________________________________
286 // `; 309 // `;
287 310
288 - logger.log(messageRes); 311 + logg.debug(messageRes);
  312 + // logger.log(messageRes);
289 messageRes += newLine 313 messageRes += newLine
290 }; 314 };
291 315
ais-structure/src/modules/main.route.js 0 → 100644
@@ -0,0 +1,114 @@ @@ -0,0 +1,114 @@
  1 +var env = process.env.NODE_ENV || 'development';
  2 +var responseMsg = require('../modules/helper/responseMsg.js');
  3 +var log = require('../modules/helper/log.js');
  4 +var constants = require('../modules/helper/constants.js');
  5 +
  6 +var cfg = require('../config/config.js').get(env);
  7 +var load = require('express-load');
  8 +
  9 +
  10 +module.exports = function (app) {
  11 +
  12 +
  13 +
  14 + app.all('/*', function (req, res,next) {
  15 +
  16 +
  17 + // console.log(req.params)
  18 + // console.log(req.query)
  19 + // console.log(req.url)
  20 + var splitPath = req._parsedUrl.pathname.split("/");
  21 + //0 = ip host
  22 + //1 = 'cmf'
  23 + //2 = 'v1'
  24 +
  25 + var objectData = {
  26 + method:req.method,
  27 + req:req,
  28 + res:res,
  29 + next:next,
  30 + splitPath:splitPath,
  31 + pathname:req._parsedUrl.pathname
  32 + };
  33 +
  34 + switch (splitPath[3]) {
  35 + case "customers":
  36 + if(splitPath[splitPath.length-1] == "membercards")
  37 + {
  38 + doMembercards(objectData);
  39 + }
  40 + else
  41 + {
  42 + objectData.modules = app.modules.customer;
  43 + doCustomers(objectData);
  44 + }
  45 + break;
  46 + case "vizcards":
  47 + doVizcard(objectData);
  48 + break;
  49 + default: next();
  50 + break;
  51 + }
  52 +
  53 +
  54 +
  55 +
  56 + });
  57 +
  58 + function doVizcard(objectData)
  59 + {
  60 + console.log("Route : "+objectData.pathname+" => doVizcard");
  61 + objectData.next();
  62 + }
  63 +
  64 + function doMembercards(objectData)
  65 + {
  66 + console.log("Route : "+objectData.pathname+" => doMembercards");
  67 + objectData.next();
  68 +
  69 + }
  70 +
  71 + function doCustomers(objectData)
  72 + {
  73 + console.log("Route : "+objectData.pathname+" => doCustomers");
  74 +
  75 + // "/cmf/v1/customers/:customerId",
  76 + // "/cmf/v1/customers/:userType/:userData",
  77 + // "/cmf/v1/customers"
  78 +
  79 + var doAction = function(){
  80 +
  81 + if(objectData.method == constants.METHOD.GET)
  82 + objectData.modules.customerCtrl.customer(objectData.req,objectData.res,objectData.next);
  83 + else
  84 + objectData.modules.postCustomerCtrl.customer(objectData.req,objectData.res,objectData.next);
  85 + };
  86 +
  87 + switch (objectData.splitPath.length) {
  88 + case 4:
  89 +
  90 + doAction();
  91 + break;
  92 + case 5:
  93 + objectData.req.params = {
  94 + customerId:objectData.splitPath[4]
  95 + };
  96 + doAction();
  97 + break;
  98 + case 6:
  99 + objectData.req.params = {
  100 + userType:objectData.splitPath[4],
  101 + userData:objectData.splitPath[5],
  102 + };
  103 + doAction();
  104 + break;
  105 +
  106 + default:
  107 + objectData.next();
  108 + break;
  109 + }
  110 + }
  111 +
  112 +
  113 +
  114 +};
ais-structure/src/modules/vizcard/vizCard.ctrl.js
@@ -17,20 +17,20 @@ exports.vizcard = async function (req, res, next) { @@ -17,20 +17,20 @@ exports.vizcard = async function (req, res, next) {
17 if(req.query.clientName && req.query.commandId){ 17 if(req.query.clientName && req.query.commandId){
18 var customerId = req.query.clientName+"@"+req.query.commandId; 18 var customerId = req.query.clientName+"@"+req.query.commandId;
19 } 19 }
20 - log.startlog(method+"_"+getCmd,req.query.commandId,customerId);  
21 - log.logDetail.addInput(req.query.clientName,method+"_"+getCmd,constant.REQUEST,req,req.body); 20 + log.startlog(req,method+"_"+getCmd,req.query.commandId,customerId);
  21 + log.logDetail.addInput(req,req.query.clientName,method+"_"+getCmd,constant.REQUEST,req,req.body);
22 22
23 var err = validator(req,getCmd); 23 var err = validator(req,getCmd);
24 24
25 if(err.length > 0) 25 if(err.length > 0)
26 { 26 {
27 - log.addErrorSummary(req.query.clientName,method+"_"+getCmd,"null","Fail");  
28 - log.log(err,'error'); 27 + log.addErrorSummary(req,req.query.clientName,method+"_"+getCmd,"null","Fail");
  28 + // log.log(err,'error');
29 var response = responseMsg.error(req,getCmd,40300); 29 var response = responseMsg.error(req,getCmd,40300);
30 // res.status(200).json(response); 30 // res.status(200).json(response);
31 }else 31 }else
32 { 32 {
33 - log.addSuccessSummary(req.query.clientName,method+"_"+getCmd,"null","Success"); 33 + log.addSuccessSummary(req,req.query.clientName,method+"_"+getCmd,"null","Success");
34 var objectData = { 34 var objectData = {
35 Username : "axviz", 35 Username : "axviz",
36 Password : "1234", 36 Password : "1234",
@@ -57,13 +57,13 @@ exports.vizcard = async function (req, res, next) { @@ -57,13 +57,13 @@ exports.vizcard = async function (req, res, next) {
57 stats.receiveSACFResponse(sacf,sendCmd,"Success"); 57 stats.receiveSACFResponse(sacf,sendCmd,"Success");
58 var response = responseMsg.success(req,getCmd,{resultData:resultSet.returnData,rowCount:resultSet.returnData.length}); 58 var response = responseMsg.success(req,getCmd,{resultData:resultSet.returnData,rowCount:resultSet.returnData.length});
59 59
60 - log.addSuccessSummary(sacf,method+"_"+sendCmd,response.resultCode,response.developerMessage); 60 + log.addSuccessSummary(req,sacf,method+"_"+sendCmd,response.resultCode,response.developerMessage);
61 } 61 }
62 catch(error) { 62 catch(error) {
63 log.log(error,'error') 63 log.log(error,'error')
64 stats.receiveSACFBadResponse(sacf,sendCmd); 64 stats.receiveSACFBadResponse(sacf,sendCmd);
65 response = responseMsg.error(req,getCmd,50000); 65 response = responseMsg.error(req,getCmd,50000);
66 - log.addErrorSummary(sacf,method+"_"+sendCmd,response.resultCode,response.developerMessage); 66 + log.addErrorSummary(req,sacf,method+"_"+sendCmd,response.resultCode,response.developerMessage);
67 var resultSet = {rawDataJson : ""} 67 var resultSet = {rawDataJson : ""}
68 } 68 }
69 69
@@ -74,11 +74,11 @@ exports.vizcard = async function (req, res, next) { @@ -74,11 +74,11 @@ exports.vizcard = async function (req, res, next) {
74 var resultSet = {rawDataJson : ""} 74 var resultSet = {rawDataJson : ""}
75 } 75 }
76 76
77 - log.logDetail.addInput(sacf,method+"_"+sendCmd,constant.RESPONSE,result,resultSet.rawDataJson); 77 + log.logDetail.addInput(req,sacf,method+"_"+sendCmd,constant.RESPONSE,result,resultSet.rawDataJson);
78 } 78 }
79 79
80 // console.log(response); 80 // console.log(response);
81 - log.logDetail.addOutput(sacf,method+"_"+getCmd,constant.RESPONSE,response,response); 81 + log.logDetail.addOutput(req,sacf,method+"_"+getCmd,constant.RESPONSE,response,response);
82 res.status(200).json(response); 82 res.status(200).json(response);
83 next(); 83 next();
84 }; 84 };