diff --git a/src/db.js b/src/db.js index 554be0a..b2a3368 100644 --- a/src/db.js +++ b/src/db.js @@ -39,6 +39,13 @@ async function jumpStart(){ coinMarketCap: 10, lastUpdated: 0, }) + DataSourceDataSchema.create({ + dataSourceName: 'tradeOgre', + data: [], + enabled: true, + updateSnapshotTime: 120, + lastUpdated: 0, + }) } } diff --git a/src/remoteData.js b/src/remoteData.js index c45cf52..a11f520 100644 --- a/src/remoteData.js +++ b/src/remoteData.js @@ -71,6 +71,13 @@ async function getMarketData(marketData, dataSource, baseCurrency){ } } } + if (dataSource == 'tradeOgre'){ + let tradeOgreDataStored = await DataSourceDataSchema.findOne({ dataSourceName: 'tradeOgre' }).exec(); + if(tradeOgreDataStored.enabled){ + let tradeOgreData = await getDataTradeOgre(marketData, baseCurrency) + if(tradeOgreData){}else{console.log("Error retrieving tradeogre.com data")} + } + } } /** @@ -341,6 +348,59 @@ async function getDataCoinGeckoDirect(marketData, baseCurrency){ } } + +/** + * + * @param {*} marketData + * @param {*} baseCurrency + * @returns + */ +async function getDataTradeOgre(marketData, baseCurrency){ + console.log("ran tradeOgre") + let url = 'https://tradeogre.com/api/v1/markets' + let data = await getData(url) + if(Array.isArray(data)){ + let tradeOgreReturnData ={} + tradeOgreReturnData['tradeOgre'] = {} + + let marketDataTradeOgreReturn = [] + data.forEach(function(marketDataName){ + // console.log(Object.values(marketDataName)[0].basename) + if(Object.values(marketDataName)[0].basename == 'PIVX'){ + // console.log(marketDataName) + marketDataTradeOgreReturn.push(marketDataName) + } + }) + + marketDataTradeOgreReturn.forEach(function(orderedMarketData){ + let key = Object.keys(orderedMarketData)[0].replace('PIVX-','').toLowerCase() + let price = Object.values(orderedMarketData)[0].price + // Set the value to db + tradeOgreReturnData.tradeOgre[key] = parseFloat(price) + + // Oracle frequently needs usd rather then usdt so if we have usdt use it as usd + if(Object.keys(orderedMarketData)[0].replace('PIVX-','').toLowerCase() == 'usdt'){ + tradeOgreReturnData.tradeOgre['usd'] = parseFloat(price) + } + }) + + + let dataFromDisk = await getMarketDataSource(marketData,"tradeOgre") + if(dataFromDisk === undefined){ + const tradeOgreDataResult = new dataSource("tradeOgre",tradeOgreReturnData,Math.floor(new Date().getTime() / 1000)) + updateOrCreateDataSource(tradeOgreDataResult) + }else{ + // Update coingecko + updateDataSource(marketData, dataFromDisk, tradeOgreReturnData, Math.floor(new Date().getTime() / 1000)) + } + // For the old endpoint will be removed soon + return marketDataTradeOgreReturn + }else{ + console.log("tradeOgre Error") + console.log(data) + } +} + //Auto check the data async function autoCheckData(){ // Fetch market data from disk @@ -351,6 +411,7 @@ async function autoCheckData(){ await getMarketData(arrMarketData, 'coinGeckoDirect', 'usd') await getMarketData(arrMarketData, 'binance','usd'); await getMarketData(arrMarketData, 'coinMarketCap','usd'); + await getMarketData(arrMarketData, 'tradeOgre','usd'); arrMarketData = await readDataSource(); } // Aggregate the prices from our various sources diff --git a/src/routes.js b/src/routes.js index 9b56f75..4ce3e95 100644 --- a/src/routes.js +++ b/src/routes.js @@ -10,6 +10,7 @@ const dataSourceUpdateTime = { //listed in seconds coinGeckoDirect: 70, coinMarketCap: 10, binance: 10, + tradeOgre: 120, } /** An optional prefix for the service router: useful if plugging in to an existing Express App */ @@ -156,6 +157,7 @@ async function prepareMarketData() { await getMarketData(arrMarketData, 'coinGeckoDirect', 'usd') await getMarketData(arrMarketData, 'binance','usd'); await getMarketData(arrMarketData, 'coinMarketCap','usd'); + await getMarketData(arrMarketData, 'tradeOgre','usd'); arrMarketData = await readDataSource(); }