add express routes for queries
This commit is contained in:
parent
18a84253e8
commit
a5025e9307
|
@ -49,6 +49,8 @@ const loadPerpMarkets = async (connection, groupConfig: GroupConfig) => {
|
|||
|
||||
async function fetchSpotStats() {
|
||||
const mangoGroup = await client.getMangoGroup(groupConfig.publicKey)
|
||||
const mangoCache = await mangoGroup.loadCache(connection)
|
||||
// TODO: reduce calls in loadRootBanks
|
||||
await mangoGroup.loadRootBanks(connection)
|
||||
|
||||
const spotMarketStats = groupConfig.spotMarkets.map((spotMarket, index) => {
|
||||
|
@ -63,7 +65,7 @@ async function fetchSpotStats() {
|
|||
depositRate: mangoGroup.getDepositRate(index).toNumber(),
|
||||
borrowRate: mangoGroup.getBorrowRate(index).toNumber(),
|
||||
utilization: totalDeposits.gt(I80F48.fromNumber(0)) ? totalBorrows.div(totalDeposits).toNumber() : 0,
|
||||
baseOraclePrice: 0,
|
||||
baseOraclePrice: mangoCache.priceCache[index].price.toNumber(),
|
||||
}
|
||||
})
|
||||
try {
|
||||
|
@ -77,6 +79,8 @@ async function fetchSpotStats() {
|
|||
}
|
||||
|
||||
async function fetchPerpStats() {
|
||||
const mangoGroup = await client.getMangoGroup(groupConfig.publicKey)
|
||||
const mangoCache = await mangoGroup.loadCache(connection)
|
||||
const perpMarkets = await loadPerpMarkets(connection, groupConfig)
|
||||
console.log("6")
|
||||
|
||||
|
@ -88,7 +92,7 @@ async function fetchPerpStats() {
|
|||
longFunding: perpMarket.longFunding.toNumber(),
|
||||
shortFunding: perpMarket.shortFunding.toNumber(),
|
||||
openInterest: perpMarket.openInterest.toNumber(),
|
||||
baseOraclePrice: 0,
|
||||
baseOraclePrice: mangoCache.priceCache[index].price.toNumber(),
|
||||
}
|
||||
})
|
||||
|
||||
|
|
48
src/index.ts
48
src/index.ts
|
@ -10,44 +10,60 @@ const app = express()
|
|||
|
||||
app.use(express.json(), cors())
|
||||
|
||||
app.get("/", async (req, res) => {
|
||||
app.get("/spot", async (req, res) => {
|
||||
try {
|
||||
const mangoGroup = (req.query.mangoGroup as string) || ""
|
||||
let stats
|
||||
if (mangoGroup === "BTC_ETH_USDT" || mangoGroup === "BTC_ETH_SOL_SRM_USDC") {
|
||||
stats = await sequelize.query(
|
||||
const mangoGroup = req.query.mangoGroup as string
|
||||
if (!mangoGroup) {
|
||||
throw new Error("Missing mangoGroup param")
|
||||
}
|
||||
|
||||
const stats = await sequelize.query(
|
||||
`SELECT time_bucket('60 minutes', time) AS "hourly",
|
||||
"symbol",
|
||||
"name",
|
||||
avg("totalDeposits")::float AS "totalDeposits",
|
||||
avg("totalBorrows")::float AS "totalBorrows",
|
||||
avg("utilization")::float AS "utilization",
|
||||
avg("depositInterest")::float AS "depositInterest",
|
||||
avg("borrowInterest")::float AS "borrowInterest",
|
||||
min("time") AS "time"
|
||||
FROM mainnet_stats
|
||||
FROM spot_market_stats
|
||||
WHERE time > current_date - interval '90' day AND "mangoGroup" = :mangoGroup
|
||||
GROUP BY "hourly", "symbol"
|
||||
GROUP BY "hourly", "name"
|
||||
ORDER BY "hourly" ASC;`,
|
||||
{
|
||||
replacements: { mangoGroup },
|
||||
type: QueryTypes.SELECT,
|
||||
}
|
||||
)
|
||||
} else {
|
||||
stats = await PerpMarketStats.findAll({
|
||||
order: [["time", "ASC"]],
|
||||
where: { mangoGroup: { [Op.or]: [null, mangoGroup] } },
|
||||
})
|
||||
}
|
||||
|
||||
res.send(stats)
|
||||
} catch (e) {
|
||||
console.log("Error inserting data", e)
|
||||
}
|
||||
})
|
||||
|
||||
app.get("/current", async (req, res) => {
|
||||
app.get("/perp/funding_rate", async (req, res) => {
|
||||
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)
|
||||
} catch (e) {
|
||||
console.log("Error inserting data", e)
|
||||
|
|
Loading…
Reference in New Issue