Commit b099a18e35cac9476b37c15416f591cadc1af47d

Authored by Adhidarma Hadiwinoto
1 parent 7d42bee187
Exists in master

coba save to mongodb

Showing 1 changed file with 154 additions and 3 deletions Side-by-side Diff

... ... @@ -9,13 +9,16 @@ var math = require('mathjs');
9 9 var winston = require('winston');
10 10 var cekstatus = require('./cekstatus.js');
11 11 var mongoClient = require('mongodb').MongoClient;
12   -var mongodb;
  12 +var LRU = require('lru-cache');
13 13  
14 14 var config;
15 15 var httpServer;
16 16 var aaa;
17 17 var logger;
18 18 var callbackReport;
  19 +var mongodb;
  20 +
  21 +var tasks = LRU(10000);
19 22  
20 23 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
21 24  
... ... @@ -23,7 +26,7 @@ var sleep_before_retry = 30000;
23 26  
24 27 var logTag = __filename.split('/').reverse()[0];
25 28  
26   -unction initMongoClient() {
  29 +function initMongoClient() {
27 30 if (!config.mongodb || !config.mongodb.url) {
28 31 return;
29 32 }
... ... @@ -46,8 +49,153 @@ unction initMongoClient() {
46 49  
47 50 }
48 51  
49   -function topupRequest(task) {
  52 +function prepareResultData(result) {
  53 + var task;
  54 +
  55 + var data = {};
  56 + data.gateway = config.globals.gateway_name;
  57 +
  58 + try {
  59 + data.requestId = result.reffid[0].trim();
  60 +
  61 + var key = config.globals.gateway_name + '.rid:' + data.requestId;
  62 + task = tasks.get(key);
  63 + }
  64 + catch(err) { data.requestId = null; }
  65 +
  66 + try {
  67 + data.status = result.ResultCode[0].trim();
  68 + }
  69 + catch(err) { data.status = '68' }
  70 +
  71 + try {
  72 + data.rcmessage = result.ErrorMsg[0].trim();
  73 + }
  74 + catch(err) { data.rcmessage = ''; }
  75 +
  76 + try {
  77 + data.resptext = '';
  78 + }
  79 + catch(err) { data.resptext = ''; }
  80 +
  81 + try {
  82 + data.dt = task.timestamp;
  83 + }
  84 + catch(err) {
  85 + logger.warn('Exception when getting timestamp data, using current timestamp', {err: err, result: result, task: task});
  86 + data.dt = strftime('%Y-%m-%d %H:%M:%S', new Date());
  87 + }
  88 +
  89 + try {
  90 + data.namapel = result.nama_pel[0].trim();
  91 + }
  92 + catch(err) { data.namapel = 'UNKNOWN'; }
  93 +
  94 + try {
  95 + data.msn = result.nsm[0].trim();
  96 + }
  97 + catch(err) { data.msn = 'UNKNOWN'; }
  98 +
  99 + try {
  100 + data.idpel = result.idpel[0].trim();
  101 + }
  102 + catch(err) { data.idpel = 'UNKNOWN'; }
  103 +
  104 + try {
  105 + data.tarifdaya = result.tarif[0].trim();
  106 + }
  107 + catch(err) { data.tarifdaya = 'UNKNOWN'; }
  108 +
  109 + try {
  110 + data.admin = parseInt(result.adminfee[0].trim());
  111 + }
  112 + catch(err) { data.admin = 0; }
  113 +
  114 + try {
  115 + data.adm = parseInt(result.adminfee[0].trim());
  116 + }
  117 + catch(err) { data.adm = 0; }
  118 +
  119 + try {
  120 + data.hargatotal = parseInt(result.amount_trx[0].trim());
  121 + }
  122 + catch(err) { data.hargatotal = 0; }
  123 +
  124 + try {
  125 + data.hargapelanggan = data.hargatotal - data.adm;
  126 + }
  127 + catch(err) { data.hargapelanggan = 0; }
  128 +
  129 + try {
  130 + data.jumlahkwh = result.jml_daya[0].trim();
  131 + }
  132 + catch(err) { data.jumlahkwh = 0; }
  133 +
  134 + try {
  135 + data.token = result.token[0].trim();
  136 + }
  137 + catch(err) { data.token = 0; }
  138 +
  139 + try {
  140 + data.ppn = result.ppn_fee[0].trim();
  141 + }
  142 + catch(err) { data.ppn_fee = 0; }
  143 +
  144 + try {
  145 + data.ppj = result.ppj_fee[0].trim();
  146 + }
  147 + catch(err) { data.ppj = 0; }
  148 +
  149 + try {
  150 + data.angsuran = result.angsuran_fee[0].trim();
  151 + }
  152 + catch(err) { data.angsuran = 0; }
  153 +
  154 + try {
  155 + data.meterai = result.materai_fee[0].trim();
  156 + }
  157 + catch(err) { data.materai_fee = 0; }
  158 +
  159 + return data;
  160 +}
  161 +
  162 +function saveTokenToMongoDb(result) {
  163 + if (!mongodb) {
  164 + return;
  165 + }
  166 +
  167 + if (!config.mongodb) {
  168 + return;
  169 + }
  170 +
  171 + if (!config.mongodb.collection) {
  172 + return;
  173 + }
  174 +
  175 + data = prepareResultData(result);
50 176  
  177 + try {
  178 + mongodb.collection(config.mongodb.collection).insertOne(data);
  179 + }
  180 + catch(err) {
  181 + logger.warn('Error when inserting data to mongodb', {err: err, data: data});
  182 + }
  183 +}
  184 +
  185 +function putTaskToCache(task) {
  186 + var key = config.globals.gateway_name + '.rid:' + task.requestId;
  187 +
  188 + try {
  189 + tasks.set(key, task);
  190 + }
  191 + catch(err) {
  192 + logger.warn('Error writing to task to cache', {err: err, key: key, task: task});
  193 + }
  194 +}
  195 +
  196 +function topupRequest(task) {
  197 + putTaskToCache(task);
  198 +
51 199 var ts = strftime('%Y%m%d%H%M%S', new Date());
52 200  
53 201 var data =
... ... @@ -92,6 +240,8 @@ function topupRequest(task) {
92 240 var directResponse = result;
93 241 logger.info(directResponse);
94 242  
  243 + saveTokenToMongoDb(directResponse.Result);
  244 +
95 245 try {
96 246 var result_price;
97 247 try {
... ... @@ -406,6 +556,7 @@ function start(_config, _callbackReport, options) {
406 556 }
407 557  
408 558 createHttpReportServer();
  559 + initMongoClient();
409 560 }
410 561  
411 562 exports.start = start;