Multi-Cloud Deployment (#1)

* Introduce instances list to scale bots and add config templating

* Use env var for wallet address if not provided as path param

* Expose SOL price as metric

* Update docs

* Add auto-swap

* Add Panopticon

* implement backoff stategy in autoswap

* Add retry logic for withdraw and swap

* bump drift-sdk, update ctl.sh and docs

* Update filler bot, add tx metrics

* Add user-metrics

* Update build and dashboard
This commit is contained in:
Patrick Balsiger
2024-04-28 07:25:08 +02:00
committed by GitHub
parent 6bd2c3367b
commit f05fac48ca
58 changed files with 9783 additions and 319 deletions

View File

@@ -3,24 +3,35 @@ 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] = createMetrics();
const [registry, usdcBalanceMetric, solBalanceMetric, solUsdcBalanceMetric, solPriceMetric] = createMetrics();
const app = express();
app.get('/metrics', async (req, res) => {
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(WALLET_ADDRESS),
loadUSDCBalance(WALLET_ADDRESS),
loadWalletBalance(walletAddress),
loadUSDCBalance(walletAddress),
loadSolanaMarketData()]);
solBalanceMetric.set({ wallet: WALLET_ADDRESS}, extractWalletBalance(solBalance));
usdcBalanceMetric.set({ wallet: WALLET_ADDRESS}, extractUSDCBalance(usdcBalance));
solUsdcBalanceMetric.set({ wallet: WALLET_ADDRESS}, extractWalletBalance(solBalance) * extractSOLPrice(marketData));
let label = { wallet: walletAddress, walletShort: trimWalletAddress(walletAddress) };
solBalanceMetric.set(label, extractWalletBalance(solBalance));
usdcBalanceMetric.set(label, extractUSDCBalance(usdcBalance));
solUsdcBalanceMetric.set(label, extractWalletBalance(solBalance) * extractSOLPrice(marketData));
solPriceMetric.set(extractSOLPrice(marketData));
res.send(await registry.metrics());
});
app.listen(3000, () => {
console.log("Server is running on port 3000");
});
});