UNPKG

bluebot

Version:

A bitcoin trading bot for auto trading at various exchanges

93 lines (72 loc) 2.54 kB
const _ = require('lodash'); const async = require('async'); var pg = require('pg'); const util = require('../../core/util.js'); const config = util.getConfig(); const dirs = util.dirs(); var postgresUtil = require('./util'); var connectionString = config.postgresql.connectionString; module.exports = done => { var scanClient = new pg.Client(connectionString+"/postgres"); let markets = []; scanClient.connect(function (err) { if(err){ util.die(err); } var sql = "select datname from pg_database"; // In single DB setup we don't need to go look into other DBs if (postgresUtil.useSingleDatabase()) { sql = "select datname from pg_database where datname='" + postgresUtil.database() + "'"; } var query = scanClient.query(sql, function (err, result) { async.each(result.rows, (dbRow, next) => { var scanTablesClient = new pg.Client(connectionString + "/" + dbRow.datname); var dbName = dbRow.datname; scanTablesClient.connect(function (err) { if (err) { return next(); } var query = scanTablesClient.query(` SELECT table_name FROM information_schema.tables WHERE table_schema='${postgresUtil.schema()}'; `, function(err, result) { if (err) { return util.die('DB error at `scanning tables`'); } _.each(result.rows, table => { let parts = table.table_name.split('_'); let first = parts.shift(); let exchangeName = dbName; /** * If using single database, we need to strip * exchange from table name. See here how tables * are named: * * - in single database setup: poloniex_candles_usdt_btc * - in multi db setup: db = poloniex, table = candles_usdt_btc */ if (postgresUtil.useSingleDatabase()) { exchangeName = first; first = parts.shift(); } if(first === 'candles') markets.push({ exchange: exchangeName, currency: _.first(parts), asset: _.last(parts) }); }); scanTablesClient.end(); next(); }); }); }, // got all tables! err => { scanClient.end(); done(err, markets); }); }); }); }