Source: core/monitorNormal.js

'use strict'
const   pu              = require('promisefy-util');
const   ccUtil          = require('../api/ccUtil');
let  Logger             = require('../logger/logger');
const BigNumber         = require('bignumber.js');
let  mrLoggerNormal;
/**
 * Used to monitor the normal transaction status.
 *
 */
const   MonitorRecordNormal   = {
  async init(config){
    this.config             = config;
    this.normalCollection   = config.normalCollection;
    this.name               = "monitorNormal";

    mrLoggerNormal              = new Logger("Monitor",this.config.logfileNameMRN, this.config.errfileNameMRN,this.config.loglevel);
    global.mrLoggerNormal       = mrLoggerNormal;
  },
  receiptFailOrNot(receipt){
    if(receipt && receipt.status !== '0x1'){
      return true;
    }
    return false;
  },
  async waitNormalConfirm(record){
    try{
      mrLoggerNormal.debug("record = %s",record);
      mrLoggerNormal.debug("Entering waitNormalConfirm, txHash = %s",record.txHash);
      let receipt = await ccUtil.waitConfirm(record.txHash,this.config.confirmBlocks,record.chainType);
      mrLoggerNormal.debug("%%%%%%%%%%%%%%%%%%%%%%%response from waitNormalConfirm%%%%%%%%%%%%%%%%%%%%%");
      mrLoggerNormal.debug("response from waitNormalConfirm, txHash = %s",record.txHash);

      mrLoggerNormal.debug(receipt);
      if(receipt && receipt.hasOwnProperty('blockNumber') && receipt.status === '0x1'){
        record.status       = 'Success';
        mrLoggerNormal.info("waitNormalConfirm update record %s, status %s :", record.lockTxHash,record.status);
        this.updateRecord(record);
      }
      if (this.receiptFailOrNot(receipt) === true){
        record.status       = 'Fail';
        mrLoggerNormal.info("waitNormalConfirm update record %s, status %s :", record.lockTxHash,record.status);
        this.updateRecord(record);
      }
    }catch(error){
      mrLoggerNormal.error("error waitNormalConfirm");
      mrLoggerNormal.error(error);
    }
  },
  updateRecord(record){
    global.wanDb.updateItem(this.normalCollection,{'txHash':record.txHash},record);
  },
  async monitorTaskNormal(){
    mrLoggerNormal.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    mrLoggerNormal.info("Entering monitor task [Normal Trans.]");
    mrLoggerNormal.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    let records = global.wanDb.filterNotContains(this.config.normalCollection,'status',['Success']);
    for(let i=0; i<records.length; i++){
      let record = records[i];
      await this.monitorRecord(record);
    }
  },
  async monitorRecord(record){
    //mrLoggerNormal.debug(this.name);
    switch(record.status) {
      /// approve begin
      case 'Sent':
      {
        this.waitNormalConfirm(record);
        break;
      }
      case 'Sending':
      {
        this.waitNormalConfirm(record);
        break;
      }
      /// revoke   end
      /// default  begin
      default:
        break;
    }
  },
}
exports.MonitorRecordNormal = MonitorRecordNormal;