From b836590ddcddb52d8ca59c0d5ac7059c2e963385 Mon Sep 17 00:00:00 2001 From: swimricky Date: Tue, 14 Nov 2023 15:17:54 -0500 Subject: [PATCH] fix: fix claimInfo formatting for datadog --- frontend/claim_sdk/eventSubscriber.ts | 72 +++++++++++++++++++- frontend/integration/integrationTest.test.ts | 10 +-- frontend/scripts/datadog.ts | 44 ++++++------ 3 files changed, 96 insertions(+), 30 deletions(-) diff --git a/frontend/claim_sdk/eventSubscriber.ts b/frontend/claim_sdk/eventSubscriber.ts index 634ae692..53230b46 100644 --- a/frontend/claim_sdk/eventSubscriber.ts +++ b/frontend/claim_sdk/eventSubscriber.ts @@ -1,6 +1,12 @@ import * as anchor from '@coral-xyz/anchor' import tokenDispenser from './idl/token_dispenser.json' -import { BorshCoder, Idl, AnchorProvider, IdlEvents } from '@coral-xyz/anchor' +import { + BorshCoder, + Idl, + AnchorProvider, + IdlEvents, + IdlTypes, +} from '@coral-xyz/anchor' import { ConfirmedSignatureInfo, TransactionSignature } from '@solana/web3.js' import { TokenDispenser } from './idl/token_dispenser' @@ -188,12 +194,74 @@ export function formatTxnEventInfo(txnEvnInfo: TxnEventInfo) { ...formattedEvent, claimant: txnEvnInfo.event.claimant.toBase58(), remainingBalance: txnEvnInfo.event.remainingBalance.toNumber(), - claimInfo: txnEvnInfo.event.claimInfo, + claimInfo: formatClaimInfo(txnEvnInfo.event.claimInfo), } } return formattedEvent } +function formatClaimInfo( + claimInfo: IdlTypes['ClaimInfo'] +): FormattedClaimInfo { + if (claimInfo.identity.discord) { + return { + ecosystem: 'discord', + address: claimInfo.identity.discord.username, + amount: claimInfo.amount.toNumber(), + } + } else if (claimInfo.identity.solana) { + return { + ecosystem: 'solana', + address: new anchor.web3.PublicKey( + claimInfo.identity.solana.pubkey + ).toBase58(), + amount: claimInfo.amount.toNumber(), + } + } else if (claimInfo.identity.evm) { + return { + ecosystem: 'evm', + address: + '0x' + Buffer.from(claimInfo.identity.evm.pubkey).toString('hex'), + amount: claimInfo.amount.toNumber(), + } + } else if (claimInfo.identity.aptos) { + return { + ecosystem: 'aptos', + address: + '0x' + Buffer.from(claimInfo.identity.aptos.address).toString('hex'), + amount: claimInfo.amount.toNumber(), + } + } else if (claimInfo.identity.sui) { + return { + ecosystem: 'sui', + address: + '0x' + Buffer.from(claimInfo.identity.sui.address).toString('hex'), + amount: claimInfo.amount.toNumber(), + } + } else if (claimInfo.identity.cosmwasm) { + return { + ecosystem: 'cosmwasm', + address: Buffer.from(claimInfo.identity.cosmwasm.address).toString(), + amount: claimInfo.amount.toNumber(), + } + } else if (claimInfo.identity.injective) { + return { + ecosystem: 'injective', + address: Buffer.from(claimInfo.identity.injective.address).toString(), + amount: claimInfo.amount.toNumber(), + } + } else + throw new Error( + `unknown identity type. ${JSON.stringify(claimInfo.identity)}}` + ) +} + +export type FormattedClaimInfo = { + ecosystem: string + address: string + amount: number +} + function chunkArray(array: any[], chunkSize: number) { return Array.from({ length: Math.ceil(array.length / chunkSize) }, (_, i) => array.slice(i * chunkSize, i * chunkSize + chunkSize) diff --git a/frontend/integration/integrationTest.test.ts b/frontend/integration/integrationTest.test.ts index 77bd56e1..407330a7 100644 --- a/frontend/integration/integrationTest.test.ts +++ b/frontend/integration/integrationTest.test.ts @@ -13,11 +13,8 @@ import { SYSVAR_INSTRUCTIONS_PUBKEY, } from '@solana/web3.js' import { Buffer } from 'buffer' -import { TokenDispenserProvider, airdrop } from '../claim_sdk/solana' -import { - formatTxnEventInfo, - TokenDispenserEventSubscriber, -} from '../claim_sdk/eventSubscriber' +import { TokenDispenserProvider } from '../claim_sdk/solana' +import { TokenDispenserEventSubscriber } from '../claim_sdk/eventSubscriber' import { DiscordTestWallet, TestWallet, @@ -26,9 +23,6 @@ import { } from '../claim_sdk/testWallets' import { loadTestWallets } from '../claim_sdk/testWallets' import { mockFetchAmountAndProof, mockfetchFundTransaction } from './api' -import { removeLeading0x } from '../claim_sdk' -import { AnchorError, BorshCoder, Idl } from '@coral-xyz/anchor' -import tokenDispenser from '../claim_sdk/idl/token_dispenser.json' import { ethers } from 'ethers' const pool = getDatabasePool() diff --git a/frontend/scripts/datadog.ts b/frontend/scripts/datadog.ts index 433f41c7..55401553 100644 --- a/frontend/scripts/datadog.ts +++ b/frontend/scripts/datadog.ts @@ -36,12 +36,12 @@ async function main() { } ) - const { txnEvents, failedTxnInfos } = - await tokenDispenserEventSubscriber.parseTransactionLogs() - const configuration = client.createConfiguration() const apiInstance = new v1.EventsApi(configuration) + const { txnEvents, failedTxnInfos } = + await tokenDispenserEventSubscriber.parseTransactionLogs() + const txnEventRequests = createTxnEventRequest(txnEvents) await Promise.all( txnEventRequests.map((txnEventRequest) => { @@ -74,24 +74,28 @@ async function main() { function createTxnEventRequest( txnEvents: TxnEventInfo[] ): v1.EventsApiCreateEventRequest[] { - return txnEvents.map((txnEvent) => { - const formattedEvent = formatTxnEventInfo(txnEvent) - const { claimant, ecosystem, address } = formattedEvent + return txnEvents + .filter((txnEvent) => txnEvent.event) // skip initialize txn + .map((txnEvent) => { + const formattedEvent = formatTxnEventInfo(txnEvent) + const { claimant } = formattedEvent - return { - body: { - title: `${claimant}-${ecosystem}-${address}`, - text: JSON.stringify(formattedEvent), - alertType: INFO, - tags: [ - `claimant:${claimant}`, - `ecosystem:${ecosystem}`, - `network:${CLUSTER}`, - `service:token-dispenser-event-subscriber`, - ], - }, - } - }) + const { ecosystem, address } = formattedEvent.claimInfo + + return { + body: { + title: `${claimant}-${ecosystem}-${address}`, + text: JSON.stringify(formattedEvent), + alertType: INFO, + tags: [ + `claimant:${claimant}`, + `ecosystem:${ecosystem}`, + `network:${CLUSTER}`, + `service:token-dispenser-event-subscriber`, + ], + }, + } + }) } function createFailedTxnEventRequest(