Skip to content

Commit

Permalink
improve analytics (#428)
Browse files Browse the repository at this point in the history
* checkpoint

* fix

* analitics

* analitics
  • Loading branch information
abrzezinski94 authored May 21, 2024
1 parent d4d38ae commit 69649b0
Show file tree
Hide file tree
Showing 5 changed files with 181 additions and 4 deletions.
1 change: 1 addition & 0 deletions components/governance/ListToken/ListToken.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,7 @@ const ListToken = ({ goBack }: { goBack: () => void }) => {
undefined, // mangoAccount
onlyDirect ? 'JUPITER_DIRECT' : 'JUPITER',
connection,
undefined,
)
},
[wallet.publicKey, connection],
Expand Down
31 changes: 28 additions & 3 deletions components/swap/SwapReviewRouteInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ import {
import { isTokenInsured } from '@components/DepositForm'
import UninsuredNotification from '@components/shared/UninsuredNotification'
import { sendTxAndConfirm } from 'utils/governance/tools'
import useAnalytics from 'hooks/useAnalytics'

type JupiterRouteInfoProps = {
amountIn: Decimal
Expand Down Expand Up @@ -302,6 +303,7 @@ const SwapReviewRouteInfo = ({
INITIAL_SOUND_SETTINGS,
)
const focusRef = useRef<HTMLButtonElement>(null)
const { sendAnalytics } = useAnalytics()

const [refetchRoutePercentage, setRefetchRoutePercentage] = useState(0)

Expand Down Expand Up @@ -430,7 +432,7 @@ const SwapReviewRouteInfo = ({
)
return
setSubmitting(true)

let tx = ''
const [ixs, alts] =
// selectedRoute.routerName === 'Mango'
// ? await prepareMangoRouterInstructions(
Expand All @@ -452,7 +454,15 @@ const SwapReviewRouteInfo = ({
)

try {
const { signature: tx, slot } = await client.marginTrade({
sendAnalytics(
{
inputMintPk: inputBank.mint,
amountIn: amountIn.toNumber(),
outputMintPk: outputBank.mint,
},
'swapping',
)
const { signature, slot } = await client.marginTrade({
group,
mangoAccount,
inputMintPk: inputBank.mint,
Expand All @@ -462,6 +472,7 @@ const SwapReviewRouteInfo = ({
userDefinedAlts: alts,
flashLoanType: { swap: {} },
})
tx = signature
set((s) => {
s.successAnimation.swap = true
s.swap.amountIn = ''
Expand All @@ -470,10 +481,16 @@ const SwapReviewRouteInfo = ({
if (soundSettings['swap-success']) {
successSound.play()
}
sendAnalytics(
{
tx: `${tx}`,
},
'swapSuccess',
)
notify({
title: 'Transaction confirmed',
type: 'success',
txid: tx,
txid: signature,
noSound: true,
})
actions.fetchGroup()
Expand All @@ -483,6 +500,13 @@ const SwapReviewRouteInfo = ({
onSuccess()
}
} catch (e) {
sendAnalytics(
{
e: `${e}`,
tx: `${tx}`,
},
'onSwapError',
)
console.error('onSwap error: ', e)
sentry.captureException(e)
if (isMangoError(e)) {
Expand Down Expand Up @@ -547,6 +571,7 @@ const SwapReviewRouteInfo = ({
}
}
}, [
sendAnalytics,
selectedRoute,
wallet.publicKey,
slippage,
Expand Down
92 changes: 91 additions & 1 deletion components/swap/useQuoteRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { MangoAccount, toUiDecimals } from '@blockworks-foundation/mango-v4'
import { findRaydiumPoolInfo, getSwapTransaction } from 'utils/swap/raydium'
import mangoStore from '@store/mangoStore'
import { fetchJupiterTransaction } from './SwapReviewRouteInfo'
import useAnalytics from 'hooks/useAnalytics'

type SwapModes = 'ExactIn' | 'ExactOut'

Expand Down Expand Up @@ -58,6 +59,7 @@ const fetchJupiterRoute = async (
maxAccounts = 64,
connection: Connection,
wallet: string,
sendAnalytics?: (data: object, tag: string) => Promise<void>,
) => {
return new Promise<{ bestRoute: JupiterV6RouteInfo }>(
// eslint-disable-next-line no-async-promise-executor
Expand Down Expand Up @@ -88,6 +90,15 @@ const fetchJupiterRoute = async (
const response = await fetch(
`${JUPITER_V6_QUOTE_API_MAINNET}/quote?${paramsString}`,
)
if (sendAnalytics) {
sendAnalytics(
{
url: `${JUPITER_V6_QUOTE_API_MAINNET}/quote?${paramsString}`,
},
'fetchJupiterRoute',
)
}

const res: JupiterV6RouteInfo = await response.json()
if (res.error) {
throw res.error
Expand All @@ -111,6 +122,14 @@ const fetchJupiterRoute = async (
bestRoute: res,
})
} catch (e) {
if (sendAnalytics) {
sendAnalytics(
{
error: `${e}`,
},
'fetchJupiterRouteError',
)
}
console.log('jupiter route error:', e)
reject(e)
}
Expand All @@ -126,11 +145,24 @@ const fetchRaydiumRoute = async (
connection: Connection,
wallet: string,
isInWalletSwap: boolean,
sendAnalytics?: (data: object, tag: string) => Promise<void>,
) => {
return new Promise<{ bestRoute: JupiterV6RouteInfo }>(
// eslint-disable-next-line no-async-promise-executor
async (resolve, reject) => {
try {
if (sendAnalytics) {
sendAnalytics(
{
inputMint,
outputMint,
amount,
slippage,
},
'fetchRaydiumRoute',
)
}

if (!inputMint || !outputMint) return

const poolKeys = await findRaydiumPoolInfo(
Expand All @@ -154,6 +186,14 @@ const fetchRaydiumRoute = async (
throw 'No route found'
}
} catch (e) {
if (sendAnalytics) {
sendAnalytics(
{
error: `${e}`,
},
'raydiumRouteError',
)
}
console.log('raydium route error:', e)
reject(e)
}
Expand All @@ -167,6 +207,7 @@ const fetchMangoRoute = async (
amount = 0,
slippage = 50,
swapMode = 'ExactIn',
sendAnalytics?: (data: object, tag: string) => Promise<void>,
) => {
return new Promise<{ bestRoute: JupiterV6RouteInfo }>(
// eslint-disable-next-line no-async-promise-executor
Expand All @@ -183,7 +224,14 @@ const fetchMangoRoute = async (
const response = await fetch(
`${MANGO_ROUTER_API_URL}/quote?${paramsString}`,
)

if (sendAnalytics) {
sendAnalytics(
{
url: `${MANGO_ROUTER_API_URL}/quote?${paramsString}`,
},
'fetchMangoRoute',
)
}
if (response.status === 500) {
throw 'No route found'
}
Expand All @@ -196,6 +244,14 @@ const fetchMangoRoute = async (
reject('No route found')
}
} catch (e) {
if (sendAnalytics) {
sendAnalytics(
{
error: `${e}`,
},
'mangoRouteError',
)
}
console.log('mango router error:', e)
reject(e)
}
Expand All @@ -213,6 +269,7 @@ export async function handleGetRoutes(
mangoAccount: MangoAccount | undefined,
routingMode: MultiRoutingMode | RaydiumRoutingMode,
connection: Connection,
sendAnalytics: ((data: object, tag: string) => Promise<void>) | undefined,
inputTokenDecimals: number,
): Promise<{ bestRoute: JupiterV6RouteInfo }>

Expand All @@ -226,6 +283,7 @@ export async function handleGetRoutes(
mangoAccount: MangoAccount | undefined,
routingMode: JupiterRoutingMode | MangoRoutingMode,
connection: Connection,
sendAnalytics: ((data: object, tag: string) => Promise<void>) | undefined,
): Promise<{ bestRoute: JupiterV6RouteInfo }>

export async function handleGetRoutes(
Expand All @@ -238,6 +296,7 @@ export async function handleGetRoutes(
mangoAccount: MangoAccount | undefined,
routingMode: RaydiumRoutingMode,
connection: Connection,
sendAnalytics: ((data: object, tag: string) => Promise<void>) | undefined,
inputTokenDecimals: number,
): Promise<{ bestRoute: JupiterV6RouteInfo }>

Expand All @@ -251,9 +310,25 @@ export async function handleGetRoutes(
mangoAccount: MangoAccount | undefined,
routingMode: RoutingMode = 'ALL',
connection: Connection,
sendAnalytics: ((data: object, tag: string) => Promise<void>) | undefined,
inputTokenDecimals?: number,
) {
try {
if (sendAnalytics) {
sendAnalytics(
{
inputMint,
outputMint,
amount,
slippage,
swapMode,
wallet,
routingMode,
},
'handleGetRoutes',
)
}

wallet ||= PublicKey.default.toBase58()

let maxAccounts: number
Expand Down Expand Up @@ -282,6 +357,7 @@ export async function handleGetRoutes(
connection,
wallet,
!mangoAccount,
sendAnalytics,
)
routes.push(raydiumRoute)
}
Expand All @@ -300,6 +376,7 @@ export async function handleGetRoutes(
maxAccounts,
connection,
wallet,
sendAnalytics,
)

routes.push(jupiterDirectRoute)
Expand All @@ -316,6 +393,7 @@ export async function handleGetRoutes(
maxAccounts,
connection,
wallet,
sendAnalytics,
)
routes.push(jupiterRoute)
}
Expand All @@ -327,6 +405,7 @@ export async function handleGetRoutes(
amount,
slippage,
swapMode,
sendAnalytics,
)
routes.push(mangoRoute)
}
Expand Down Expand Up @@ -354,6 +433,14 @@ export async function handleGetRoutes(
: null,
}
} catch (e) {
if (sendAnalytics) {
sendAnalytics(
{
error: `${e}`,
},
'noRouteFoundError',
)
}
return {
bestRoute: null,
}
Expand All @@ -372,6 +459,7 @@ const useQuoteRoutes = ({
enabled,
}: useQuoteRoutesPropTypes) => {
const connection = mangoStore((s) => s.connection)
const { sendAnalytics } = useAnalytics()
const { inputTokenInfo, outputTokenInfo } = useJupiterSwapData()
const decimals = useMemo(() => {
return swapMode === 'ExactIn'
Expand Down Expand Up @@ -419,6 +507,7 @@ const useQuoteRoutes = ({
mangoAccount,
routingMode,
connection,
sendAnalytics,
decimals,
)
} else {
Expand All @@ -432,6 +521,7 @@ const useQuoteRoutes = ({
mangoAccount,
routingMode,
connection,
sendAnalytics,
)
}
},
Expand Down
7 changes: 7 additions & 0 deletions components/trade/TradingViewChart.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import { findSerum3MarketPkInOpenOrders } from './OpenOrders'
import { Transition } from '@headlessui/react'
import useThemeWrapper from 'hooks/useThemeWrapper'
import { handleCancelTriggerOrder } from '@components/swap/SwapTriggerOrders'
import useAnalytics from 'hooks/useAnalytics'

export interface ChartContainerProps {
container: ChartingLibraryWidgetOptions['container']
Expand Down Expand Up @@ -93,6 +94,8 @@ const TradingViewChart = () => {
const [orderToModify, setOrderToModify] = useState<Order | PerpOrder | null>(
null,
)

const { sendAnalytics } = useAnalytics()
const [modifiedPrice, setModifiedPrice] = useState('')
const [showOrderLinesLocalStorage, toggleShowOrderLinesLocalStorage] =
useLocalStorageState(SHOW_ORDER_LINES_KEY, true)
Expand Down Expand Up @@ -174,6 +177,10 @@ const TradingViewChart = () => {
}
}, [chartReady, selectedMarketName, showOrderLinesLocalStorage])

useEffect(() => {
sendAnalytics({ selectedMarketName: selectedMarketName }, 'chart_page')
}, [selectedMarketName, sendAnalytics])

useEffect(() => {
if (showOrderLines !== showOrderLinesLocalStorage) {
toggleShowOrderLinesLocalStorage(showOrderLines)
Expand Down
Loading

0 comments on commit 69649b0

Please sign in to comment.