Files
drift-keeper/wallet-tracker/src/main.js

40 lines
1.5 KiB
JavaScript

const express = require('express');
const { createMetrics } = require('./metrics');
const { loadWalletBalance, loadUSDCBalance, loadSolanaMarketData, extractWalletBalance, extractUSDCBalance, extractSOLPrice } = require('./solana');
const WALLET_ADDRESS = process.env.WALLET_ADDRESS;
const [registry, usdcBalanceMetric, solBalanceMetric, solUsdcBalanceMetric, solPriceMetric] = createMetrics();
const app = express();
const trimWalletAddress = (walletAddress) => {
return `${walletAddress.slice(0,4)}...${walletAddress.slice(walletAddress.length-4, walletAddress.length)}`;
}
app.get('/metrics/:addr?', async (req, res) => {
const walletAddress = req.params.addr || WALLET_ADDRESS;
console.log(`Gathering metrics for ${walletAddress}`);
res.setHeader('Content-Type', registry.contentType);
//registry.resetMetrics();
let [solBalance, usdcBalance, marketData] = await Promise.all([
loadWalletBalance(walletAddress),
loadUSDCBalance(walletAddress),
loadSolanaMarketData()]);
let label = { wallet: walletAddress, walletShort: trimWalletAddress(walletAddress) };
solBalanceMetric.set(label, extractWalletBalance(solBalance));
usdcBalanceMetric.set(label, extractUSDCBalance(usdcBalance));
let solPrice = extractSOLPrice(marketData);
if(solPrice){
solUsdcBalanceMetric.set(label, extractWalletBalance(solBalance) * solPrice);
solPriceMetric.set(solPrice);
}
res.send(await registry.metrics());
});
app.listen(3000, () => {
console.log("Server is running on port 3000");
});