add express routes for queries

This commit is contained in:
Tyler Shipe 2021-07-27 18:03:22 -04:00
parent 18a84253e8
commit a5025e9307
2 changed files with 44 additions and 24 deletions

View File

@ -49,6 +49,8 @@ const loadPerpMarkets = async (connection, groupConfig: GroupConfig) => {
async function fetchSpotStats() { async function fetchSpotStats() {
const mangoGroup = await client.getMangoGroup(groupConfig.publicKey) const mangoGroup = await client.getMangoGroup(groupConfig.publicKey)
const mangoCache = await mangoGroup.loadCache(connection)
// TODO: reduce calls in loadRootBanks
await mangoGroup.loadRootBanks(connection) await mangoGroup.loadRootBanks(connection)
const spotMarketStats = groupConfig.spotMarkets.map((spotMarket, index) => { const spotMarketStats = groupConfig.spotMarkets.map((spotMarket, index) => {
@ -63,7 +65,7 @@ async function fetchSpotStats() {
depositRate: mangoGroup.getDepositRate(index).toNumber(), depositRate: mangoGroup.getDepositRate(index).toNumber(),
borrowRate: mangoGroup.getBorrowRate(index).toNumber(), borrowRate: mangoGroup.getBorrowRate(index).toNumber(),
utilization: totalDeposits.gt(I80F48.fromNumber(0)) ? totalBorrows.div(totalDeposits).toNumber() : 0, utilization: totalDeposits.gt(I80F48.fromNumber(0)) ? totalBorrows.div(totalDeposits).toNumber() : 0,
baseOraclePrice: 0, baseOraclePrice: mangoCache.priceCache[index].price.toNumber(),
} }
}) })
try { try {
@ -77,6 +79,8 @@ async function fetchSpotStats() {
} }
async function fetchPerpStats() { async function fetchPerpStats() {
const mangoGroup = await client.getMangoGroup(groupConfig.publicKey)
const mangoCache = await mangoGroup.loadCache(connection)
const perpMarkets = await loadPerpMarkets(connection, groupConfig) const perpMarkets = await loadPerpMarkets(connection, groupConfig)
console.log("6") console.log("6")
@ -88,7 +92,7 @@ async function fetchPerpStats() {
longFunding: perpMarket.longFunding.toNumber(), longFunding: perpMarket.longFunding.toNumber(),
shortFunding: perpMarket.shortFunding.toNumber(), shortFunding: perpMarket.shortFunding.toNumber(),
openInterest: perpMarket.openInterest.toNumber(), openInterest: perpMarket.openInterest.toNumber(),
baseOraclePrice: 0, baseOraclePrice: mangoCache.priceCache[index].price.toNumber(),
} }
}) })

View File

@ -10,44 +10,60 @@ const app = express()
app.use(express.json(), cors()) app.use(express.json(), cors())
app.get("/", async (req, res) => { app.get("/spot", async (req, res) => {
try { try {
const mangoGroup = (req.query.mangoGroup as string) || "" const mangoGroup = req.query.mangoGroup as string
let stats if (!mangoGroup) {
if (mangoGroup === "BTC_ETH_USDT" || mangoGroup === "BTC_ETH_SOL_SRM_USDC") { throw new Error("Missing mangoGroup param")
stats = await sequelize.query( }
`SELECT time_bucket('60 minutes', time) AS "hourly",
"symbol", const stats = await sequelize.query(
`SELECT time_bucket('60 minutes', time) AS "hourly",
"name",
avg("totalDeposits")::float AS "totalDeposits", avg("totalDeposits")::float AS "totalDeposits",
avg("totalBorrows")::float AS "totalBorrows", avg("totalBorrows")::float AS "totalBorrows",
avg("utilization")::float AS "utilization", avg("utilization")::float AS "utilization",
avg("depositInterest")::float AS "depositInterest", avg("depositInterest")::float AS "depositInterest",
avg("borrowInterest")::float AS "borrowInterest", avg("borrowInterest")::float AS "borrowInterest",
min("time") AS "time" min("time") AS "time"
FROM mainnet_stats FROM spot_market_stats
WHERE time > current_date - interval '90' day AND "mangoGroup" = :mangoGroup WHERE time > current_date - interval '90' day AND "mangoGroup" = :mangoGroup
GROUP BY "hourly", "symbol" GROUP BY "hourly", "name"
ORDER BY "hourly" ASC;`, ORDER BY "hourly" ASC;`,
{ {
replacements: { mangoGroup }, replacements: { mangoGroup },
type: QueryTypes.SELECT, type: QueryTypes.SELECT,
} }
) )
} else {
stats = await PerpMarketStats.findAll({
order: [["time", "ASC"]],
where: { mangoGroup: { [Op.or]: [null, mangoGroup] } },
})
}
res.send(stats) res.send(stats)
} catch (e) { } catch (e) {
console.log("Error inserting data", e) console.log("Error inserting data", e)
} }
}) })
app.get("/current", async (req, res) => { app.get("/perp/funding_rate", async (req, res) => {
try { try {
const stats = await PerpMarketStats.findAll({ limit: 3, order: [["time", "DESC"]] }) const market = req.query.market as string
if (!market) {
throw new Error("Missing mangoGroup param")
}
const stats = await sequelize.query(
`SELECT
"longFunding",
"shortFunding",
"openInterest",
"baseOraclePrice",
"time"
FROM perp_market_stats
WHERE time > NOW() - interval '1 hour' AND "name" = :market`,
{
replacements: { market },
type: QueryTypes.SELECT,
}
)
res.send(stats) res.send(stats)
} catch (e) { } catch (e) {
console.log("Error inserting data", e) console.log("Error inserting data", e)