UNPKG

bitcore-wallet-service

Version:
172 lines 6.49 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CleanFiatRates = void 0; const async = __importStar(require("async")); const _ = __importStar(require("lodash")); const moment_1 = __importDefault(require("moment")); const mongodb = __importStar(require("mongodb")); const config_1 = __importDefault(require("../config")); const logger_1 = __importDefault(require("./logger")); const storage_1 = require("./storage"); const ObjectID = mongodb.ObjectID; var objectIdDate = function (date) { return Math.floor(date.getTime() / 1000).toString(16) + '0000000000000000'; }; class CleanFiatRates { constructor() { } run(cb) { let dbConfig = config_1.default.storageOpts.mongoDb; let uri = dbConfig.uri; uri = uri + 'readPreference=secondaryPreferred'; console.log('Connected to ', uri); if (!dbConfig.dbname) { return cb(new Error('No dbname at config.')); } mongodb.MongoClient.connect(dbConfig.uri, { useUnifiedTopology: true }, (err, client) => { if (err) { return cb(err); } this.db = client.db(dbConfig.dbname); this.client = client; this.cleanFiatRates((err, rates) => { if (err) return cb(err); this.client.close(err => { if (err) logger_1.default.error('%o', err); return cb(null, rates); }); }); }); } cleanFiatRates(cb) { let dates; async.series([ next => { console.log('## Getting dates to keep...'); this._getDatesToKeep((err, res) => { if (err) { return next(err); } dates = res; next(); }); }, next => { console.log('## Cleaning fiat rates...'); this._cleanFiatRates(dates, next); } ], (err, results) => { if (err) return cb(err); return cb(null, results[1]); }); } async _getDatesToKeep(cb) { this.from = new Date(); this.from.setMonth(this.from.getMonth() - 2); console.log(`\tFrom: ${(0, moment_1.default)(this.from).toDate()}`); this.to = new Date(); this.to.setMonth(this.to.getMonth() - 1); console.log(`\tTo: ${(0, moment_1.default)(this.to).toDate()}`); const objectIdFromDate = objectIdDate(this.from); const objectIdToDate = objectIdDate(this.to); this.db .collection(storage_1.Storage.collections.FIAT_RATES2) .find({ _id: { $gte: new ObjectID(objectIdFromDate), $lte: new ObjectID(objectIdToDate) } }) .sort({ _id: 1 }) .toArray((err, results) => { if (err) return cb(err); const datesToKeep = []; let tsGruopedByCoin = _.reduce(results, (r, a) => { r[a.coin] = _.uniq([...(r[a.coin] || []), a.ts]); return r; }, {}); _.forEach(tsGruopedByCoin, (tsGroup, key) => { console.log(`\tFiltering times for ${key.toUpperCase()}`); let prevTime = null; let isSameHour; _.forEach(tsGroup, (ts) => { if (prevTime > ts + 60 * 10000) return cb(new Error('Results not in order')); if (prevTime) { isSameHour = (0, moment_1.default)(prevTime).isSame((0, moment_1.default)(ts), 'hour'); if (!isSameHour) { datesToKeep.push(ts); } } else { datesToKeep.push(ts); } prevTime = ts; }); }); return cb(null, datesToKeep); }); } async _cleanFiatRates(datesToKeep, cb) { try { this.db .collection(storage_1.Storage.collections.FIAT_RATES2) .remove({ ts: { $nin: datesToKeep, $gte: (0, moment_1.default)(this.from).valueOf(), $lte: (0, moment_1.default)(this.to).valueOf() } }) .then(data => { console.log(`\t${data.result.n} entries were removed from fiat_rates2`); return cb(null, data.result); }); } catch (err) { console.log('\t!! Cannot remove data from fiat_rates2:', err); return cb(err); } } } exports.CleanFiatRates = CleanFiatRates; //# sourceMappingURL=cleanfiatrates.js.map