From b42a35cdb99be460d1b6a15363e80c445407d34c Mon Sep 17 00:00:00 2001 From: microwavedcola1 Date: Tue, 5 Sep 2023 15:56:04 +0200 Subject: [PATCH] sb logs Signed-off-by: microwavedcola1 --- ts/client/scripts/switchboard-logs.ts | 72 +++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 ts/client/scripts/switchboard-logs.ts diff --git a/ts/client/scripts/switchboard-logs.ts b/ts/client/scripts/switchboard-logs.ts new file mode 100644 index 000000000..8d23aacc1 --- /dev/null +++ b/ts/client/scripts/switchboard-logs.ts @@ -0,0 +1,72 @@ +import { PublicKey } from '@solana/web3.js'; +import { Group } from '../src/accounts/group'; +import { isSwitchboardOracle } from '../src/accounts/oracle'; +import { MangoClient } from '../src/client'; +import { buildFetch } from '../src/utils'; + +function getNameForBank(group: Group, oracle: PublicKey): string { + let match: any[] = Array.from(group.banksMapByName.values()) + .flat() + .filter((b) => b.oracle.equals(oracle)); + if (match.length > 0) { + return match[0].name; + } + + match = Array.from(group.perpMarketsMapByName.values()).filter((p) => + p.oracle.equals(oracle), + ); + if (match.length > 0) { + return match[0].name; + } + + throw new Error(`No token or perp market found for ${oracle}`); +} + +async function main(): Promise { + const client = await MangoClient.connectDefault(process.env.MB_CLUSTER_URL!); + const group = await client.getGroup( + new PublicKey('78b8f4cGCwmZ9ysPFMWLaLTkkaYnUjwMJYStWe5RTSSX'), + ); + + const oracles1 = Array.from(group.banksMapByName.values()).map( + (b) => b[0].oracle, + ); + const oracles2 = Array.from(group.perpMarketsMapByName.values()).map( + (p) => p.oracle, + ); + const oracles = oracles1.concat(oracles2); + + const ais = await client.program.provider.connection.getMultipleAccountsInfo( + oracles, + ); + + const switcboardOracles: PublicKey[] = ais + .map((ai, i) => [isSwitchboardOracle(ai!), oracles[i]]) + .filter((r) => r[0]) + .map((r) => r[1]) as PublicKey[]; + + for (const o of switcboardOracles) { + const r = await ( + await buildFetch() + )('https://stats.switchboard.xyz/logs', { + headers: { + accept: '*/*', + 'content-type': 'application/json', + }, + body: `{"cluster":"solana-mainnet","query":"${o.toString()}","number":100,"severity":"INFO"}`, + method: 'POST', + }); + + console.log(`${getNameForBank(group, o)} ${o}`); + + (await r.json()).forEach((e: { message: string; timestamp: string }) => { + if (e.message.toLowerCase().includes('error')) { + console.log(`${e.timestamp}: ${e.message}`); + } + }); + + console.log(``); + } +} + +main();