2020-06-10 16:22:01 +03:00
|
|
|
require('dotenv').config()
|
2019-05-08 16:12:02 +03:00
|
|
|
const Web3 = require('web3')
|
|
|
|
const logger = require('./logger')('checkWorker')
|
2019-07-12 15:49:46 +03:00
|
|
|
const { getBridgeMode } = require('../commons')
|
2019-05-08 16:12:02 +03:00
|
|
|
const getBalances = require('./getBalances')
|
|
|
|
const getShortEventStats = require('./getShortEventStats')
|
|
|
|
const validators = require('./validators')
|
2020-01-10 15:55:35 +03:00
|
|
|
const { writeFile, createDir } = require('./utils/file')
|
|
|
|
|
|
|
|
const { COMMON_HOME_BRIDGE_ADDRESS, COMMON_HOME_RPC_URL, MONITOR_BRIDGE_NAME } = process.env
|
|
|
|
|
|
|
|
const MONITOR_VALIDATOR_HOME_TX_LIMIT = Number(process.env.MONITOR_VALIDATOR_HOME_TX_LIMIT) || 0
|
|
|
|
const MONITOR_VALIDATOR_FOREIGN_TX_LIMIT = Number(process.env.MONITOR_VALIDATOR_FOREIGN_TX_LIMIT) || 0
|
|
|
|
const MONITOR_TX_NUMBER_THRESHOLD = Number(process.env.MONITOR_TX_NUMBER_THRESHOLD) || 100
|
2019-05-08 16:12:02 +03:00
|
|
|
|
2019-09-13 10:11:38 +03:00
|
|
|
const homeProvider = new Web3.providers.HttpProvider(COMMON_HOME_RPC_URL)
|
2019-05-08 16:12:02 +03:00
|
|
|
const web3Home = new Web3(homeProvider)
|
|
|
|
|
2019-07-12 15:49:46 +03:00
|
|
|
const { HOME_ERC_TO_ERC_ABI } = require('../commons')
|
2019-05-08 16:12:02 +03:00
|
|
|
|
|
|
|
async function checkWorker() {
|
|
|
|
try {
|
2020-01-10 15:55:35 +03:00
|
|
|
createDir(`/responses/${MONITOR_BRIDGE_NAME}`)
|
2019-09-13 10:11:38 +03:00
|
|
|
const homeBridge = new web3Home.eth.Contract(HOME_ERC_TO_ERC_ABI, COMMON_HOME_BRIDGE_ADDRESS)
|
2019-05-31 21:35:50 +03:00
|
|
|
const bridgeMode = await getBridgeMode(homeBridge)
|
2019-05-08 16:12:02 +03:00
|
|
|
logger.debug('Bridge mode:', bridgeMode)
|
|
|
|
logger.debug('calling getBalances()')
|
|
|
|
const balances = await getBalances(bridgeMode)
|
|
|
|
logger.debug('calling getShortEventStats()')
|
|
|
|
const events = await getShortEventStats(bridgeMode)
|
|
|
|
const home = Object.assign({}, balances.home, events.home)
|
|
|
|
const foreign = Object.assign({}, balances.foreign, events.foreign)
|
|
|
|
const status = Object.assign({}, balances, events, { home }, { foreign })
|
|
|
|
if (!status) throw new Error('status is empty: ' + JSON.stringify(status))
|
2020-05-18 21:24:16 +03:00
|
|
|
status.health = true
|
2020-01-10 15:55:35 +03:00
|
|
|
writeFile(`/responses/${MONITOR_BRIDGE_NAME}/getBalances.json`, status)
|
2019-05-08 16:12:02 +03:00
|
|
|
|
|
|
|
logger.debug('calling validators()')
|
|
|
|
const vBalances = await validators(bridgeMode)
|
|
|
|
if (!vBalances) throw new Error('vBalances is empty: ' + JSON.stringify(vBalances))
|
2020-01-10 15:55:35 +03:00
|
|
|
|
|
|
|
vBalances.homeOk = true
|
|
|
|
vBalances.foreignOk = true
|
|
|
|
|
|
|
|
if (MONITOR_VALIDATOR_HOME_TX_LIMIT) {
|
|
|
|
for (const hv in vBalances.home.validators) {
|
|
|
|
if (vBalances.home.validators[hv].leftTx < MONITOR_TX_NUMBER_THRESHOLD) {
|
|
|
|
vBalances.homeOk = false
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (MONITOR_VALIDATOR_FOREIGN_TX_LIMIT) {
|
|
|
|
for (const hv in vBalances.foreign.validators) {
|
|
|
|
if (vBalances.foreign.validators[hv].leftTx < MONITOR_TX_NUMBER_THRESHOLD) {
|
|
|
|
vBalances.foreignOk = false
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
vBalances.ok = vBalances.homeOk && vBalances.foreignOk
|
2020-05-18 21:24:16 +03:00
|
|
|
vBalances.health = true
|
2020-01-10 15:55:35 +03:00
|
|
|
writeFile(`/responses/${MONITOR_BRIDGE_NAME}/validators.json`, vBalances)
|
2019-05-08 16:12:02 +03:00
|
|
|
logger.debug('Done')
|
|
|
|
} catch (e) {
|
|
|
|
logger.error(e)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
checkWorker()
|