Skip to content

Commit

Permalink
Handle better errors by getting tags in pre-init
Browse files Browse the repository at this point in the history
  • Loading branch information
tommasini committed Feb 18, 2025
1 parent b5ea162 commit 5fc8390
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 34 deletions.
25 changes: 25 additions & 0 deletions app/util/sentry/tags/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -350,5 +350,30 @@ describe('Tags Utils', () => {

expect(tags).toBeUndefined();
});

it('returns null and captures exception when an error occurs', () => {
const state = {
...initialRootState,
engine: {
backgroundState: {
...backgroundState,
AccountsController: Object.create(
{},
{
someProperty: {
get: () => {
throw new Error('Test error');
},
},
},
),
},
},
} as unknown as RootState;

const tags = getTraceTags(state);

expect(tags).toBeNull();
});
});
});
74 changes: 40 additions & 34 deletions app/util/sentry/tags/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,44 +5,50 @@ import { selectAllTokensFlat } from '../../../selectors/tokensController';
import { getNotificationsList } from '../../../selectors/notifications';
import { selectTransactions } from '../../../selectors/transactionController';
import { selectPendingApprovals } from '../../../selectors/approvalController';
import { captureException } from '@sentry/react-native';

export function getTraceTags(state: RootState) {
if (!state?.engine?.backgroundState?.AccountsController) return;
if (!state?.engine?.backgroundState?.NftController) return;
if (!state?.engine?.backgroundState?.NftController?.allNfts) return;
if (!state?.engine?.backgroundState?.NotificationServicesController) return;
if (
!state?.engine?.backgroundState?.NotificationServicesController
?.metamaskNotificationsList
)
return;
if (!state?.engine?.backgroundState?.TokensController) return;
if (!state?.engine?.backgroundState?.TokensController?.allTokens) return;
if (!state?.engine?.backgroundState?.TransactionController) return;
if (!state?.engine?.backgroundState?.TransactionController?.transactions)
return;
if (!state?.engine?.backgroundState?.ApprovalController) return;
try {
if (!state?.engine?.backgroundState?.AccountsController) return;
if (!state?.engine?.backgroundState?.NftController) return;
if (!state?.engine?.backgroundState?.NftController?.allNfts) return;
if (!state?.engine?.backgroundState?.NotificationServicesController) return;
if (
!state?.engine?.backgroundState?.NotificationServicesController
?.metamaskNotificationsList
)
return;
if (!state?.engine?.backgroundState?.TokensController) return;
if (!state?.engine?.backgroundState?.TokensController?.allTokens) return;
if (!state?.engine?.backgroundState?.TransactionController) return;
if (!state?.engine?.backgroundState?.TransactionController?.transactions)
return;
if (!state?.engine?.backgroundState?.ApprovalController) return;

if (!Object.keys(state?.engine?.backgroundState).length) return;
if (!Object.keys(state?.engine?.backgroundState).length) return;

const unlocked = state.user.userLoggedIn;
const accountCount = selectInternalAccounts(state)?.length;
const nftCount = selectAllNftsFlat(state)?.length;
const notificationCount = getNotificationsList(state)?.length;
const tokenCount = selectAllTokensFlat(state)?.length;
const transactionCount = selectTransactions(state)?.length;
const pendingApprovals = selectPendingApprovals(state);
const pendingApprovalsValues = Object.values(pendingApprovals ?? {});
const unlocked = state.user.userLoggedIn;
const accountCount = selectInternalAccounts(state)?.length;
const nftCount = selectAllNftsFlat(state)?.length;
const notificationCount = getNotificationsList(state)?.length;
const tokenCount = selectAllTokensFlat(state)?.length;
const transactionCount = selectTransactions(state)?.length;
const pendingApprovals = selectPendingApprovals(state);
const pendingApprovalsValues = Object.values(pendingApprovals ?? {});

const firstApprovalType = pendingApprovalsValues?.[0]?.type;
const firstApprovalType = pendingApprovalsValues?.[0]?.type;

return {
'wallet.account_count': accountCount,
'wallet.nft_count': nftCount,
'wallet.notification_count': notificationCount,
'wallet.pending_approval': firstApprovalType,
'wallet.token_count': tokenCount,
'wallet.transaction_count': transactionCount,
'wallet.unlocked': unlocked,
};
return {
'wallet.account_count': accountCount,
'wallet.nft_count': nftCount,
'wallet.notification_count': notificationCount,
'wallet.pending_approval': firstApprovalType,
'wallet.token_count': tokenCount,
'wallet.transaction_count': transactionCount,
'wallet.unlocked': unlocked,
};
} catch (error) {
captureException(`Error getting tags: ${error}`);
return null;
}
}

0 comments on commit 5fc8390

Please sign in to comment.