mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 01:39:44 +01:00
Send metrics event from backend for on chain transaction failures (#6500)
* Send metrics event from backend for on chain transaction failures * Passes state object to backEndMetaMetricsEvent, and adds getMetaMetricState selector
This commit is contained in:
parent
0095889408
commit
4fea9d0cc2
@ -117,6 +117,14 @@ class PreferencesController {
|
|||||||
return metaMetricsId
|
return metaMetricsId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getMetaMetricsId () {
|
||||||
|
return this.store.getState().metaMetricsId
|
||||||
|
}
|
||||||
|
|
||||||
|
getParticipateInMetaMetrics () {
|
||||||
|
return this.store.getState().participateInMetaMetrics
|
||||||
|
}
|
||||||
|
|
||||||
setMetaMetricsSendCount (val) {
|
setMetaMetricsSendCount (val) {
|
||||||
this.store.updateState({ metaMetricsSendCount: val })
|
this.store.updateState({ metaMetricsSendCount: val })
|
||||||
}
|
}
|
||||||
|
26
app/scripts/lib/backend-metametrics.js
Normal file
26
app/scripts/lib/backend-metametrics.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
const {
|
||||||
|
getMetaMetricState,
|
||||||
|
} = require('../../../ui/app/selectors/selectors')
|
||||||
|
const {
|
||||||
|
sendMetaMetricsEvent,
|
||||||
|
} = require('../../../ui/app/helpers/utils/metametrics.util')
|
||||||
|
|
||||||
|
const inDevelopment = process.env.NODE_ENV === 'development'
|
||||||
|
|
||||||
|
const METAMETRICS_TRACKING_URL = inDevelopment
|
||||||
|
? 'http://www.metamask.io/metametrics'
|
||||||
|
: 'http://www.metamask.io/metametrics-prod'
|
||||||
|
|
||||||
|
function backEndMetaMetricsEvent (metaMaskState, eventData) {
|
||||||
|
const stateEventData = getMetaMetricState({ metamask: metaMaskState })
|
||||||
|
|
||||||
|
if (stateEventData.participateInMetaMetrics) {
|
||||||
|
sendMetaMetricsEvent({
|
||||||
|
...stateEventData,
|
||||||
|
...eventData,
|
||||||
|
url: METAMETRICS_TRACKING_URL + '/backend',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = backEndMetaMetricsEvent
|
@ -54,6 +54,7 @@ const EthQuery = require('eth-query')
|
|||||||
const ethUtil = require('ethereumjs-util')
|
const ethUtil = require('ethereumjs-util')
|
||||||
const sigUtil = require('eth-sig-util')
|
const sigUtil = require('eth-sig-util')
|
||||||
const { AddressBookController } = require('gaba')
|
const { AddressBookController } = require('gaba')
|
||||||
|
const backEndMetaMetricsEvent = require('./lib/backend-metametrics')
|
||||||
|
|
||||||
|
|
||||||
module.exports = class MetamaskController extends EventEmitter {
|
module.exports = class MetamaskController extends EventEmitter {
|
||||||
@ -190,10 +191,26 @@ module.exports = class MetamaskController extends EventEmitter {
|
|||||||
})
|
})
|
||||||
this.txController.on('newUnapprovedTx', () => opts.showUnapprovedTx())
|
this.txController.on('newUnapprovedTx', () => opts.showUnapprovedTx())
|
||||||
|
|
||||||
this.txController.on(`tx:status-update`, (txId, status) => {
|
this.txController.on(`tx:status-update`, async (txId, status) => {
|
||||||
if (status === 'confirmed' || status === 'failed') {
|
if (status === 'confirmed' || status === 'failed') {
|
||||||
const txMeta = this.txController.txStateManager.getTx(txId)
|
const txMeta = this.txController.txStateManager.getTx(txId)
|
||||||
this.platform.showTransactionNotification(txMeta)
|
this.platform.showTransactionNotification(txMeta)
|
||||||
|
|
||||||
|
const { txReceipt } = txMeta
|
||||||
|
const participateInMetaMetrics = this.preferencesController.getParticipateInMetaMetrics()
|
||||||
|
if (txReceipt && txReceipt.status === '0x0' && participateInMetaMetrics) {
|
||||||
|
const metamaskState = await this.getState()
|
||||||
|
backEndMetaMetricsEvent(metamaskState, {
|
||||||
|
customVariables: {
|
||||||
|
errorMessage: txMeta.simulationFails.reason,
|
||||||
|
},
|
||||||
|
eventOpts: {
|
||||||
|
category: 'backend',
|
||||||
|
action: 'Transactions',
|
||||||
|
name: 'On Chain Failure',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -375,7 +375,7 @@ export function setTransactionToConfirm (transactionId) {
|
|||||||
dispatch(updateMethodData(methodData))
|
dispatch(updateMethodData(methodData))
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const toSmartContract = await isSmartContractAddress(to)
|
const toSmartContract = await isSmartContractAddress(to || '')
|
||||||
dispatch(updateToSmartContract(toSmartContract))
|
dispatch(updateToSmartContract(toSmartContract))
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.error(error)
|
log.error(error)
|
||||||
|
@ -124,10 +124,10 @@ function composeUrl (config, permissionPreferences = {}) {
|
|||||||
numberOfTokens: customVariables && customVariables.numberOfTokens || numberOfTokens,
|
numberOfTokens: customVariables && customVariables.numberOfTokens || numberOfTokens,
|
||||||
numberOfAccounts: customVariables && customVariables.numberOfAccounts || numberOfAccounts,
|
numberOfAccounts: customVariables && customVariables.numberOfAccounts || numberOfAccounts,
|
||||||
}) : ''
|
}) : ''
|
||||||
const url = configUrl || `&url=${encodeURIComponent(currentPath.replace(/chrome-extension:\/\/\w+/, METAMETRICS_TRACKING_URL))}`
|
const url = configUrl || currentPath ? `&url=${encodeURIComponent(currentPath.replace(/chrome-extension:\/\/\w+/, METAMETRICS_TRACKING_URL))}` : ''
|
||||||
const _id = metaMetricsId && !excludeMetaMetricsId ? `&_id=${metaMetricsId.slice(2, 18)}` : ''
|
const _id = metaMetricsId && !excludeMetaMetricsId ? `&_id=${metaMetricsId.slice(2, 18)}` : ''
|
||||||
const rand = `&rand=${String(Math.random()).slice(2)}`
|
const rand = `&rand=${String(Math.random()).slice(2)}`
|
||||||
const pv_id = `&pv_id=${ethUtil.bufferToHex(ethUtil.sha3(url || currentPath.match(/chrome-extension:\/\/\w+\/(.+)/)[0])).slice(2, 8)}`
|
const pv_id = (url || currentPath) && `&pv_id=${ethUtil.bufferToHex(ethUtil.sha3(url || currentPath.match(/chrome-extension:\/\/\w+\/(.+)/)[0])).slice(2, 8)}` || ''
|
||||||
const uid = metaMetricsId && !excludeMetaMetricsId
|
const uid = metaMetricsId && !excludeMetaMetricsId
|
||||||
? `&uid=${metaMetricsId.slice(2, 18)}`
|
? `&uid=${metaMetricsId.slice(2, 18)}`
|
||||||
: excludeMetaMetricsId
|
: excludeMetaMetricsId
|
||||||
|
@ -48,6 +48,7 @@ const selectors = {
|
|||||||
getNumberOfAccounts,
|
getNumberOfAccounts,
|
||||||
getNumberOfTokens,
|
getNumberOfTokens,
|
||||||
isEthereumNetwork,
|
isEthereumNetwork,
|
||||||
|
getMetaMetricState,
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = selectors
|
module.exports = selectors
|
||||||
@ -165,7 +166,7 @@ function getSelectedToken (state) {
|
|||||||
const tokens = state.metamask.tokens || []
|
const tokens = state.metamask.tokens || []
|
||||||
const selectedTokenAddress = state.metamask.selectedTokenAddress
|
const selectedTokenAddress = state.metamask.selectedTokenAddress
|
||||||
const selectedToken = tokens.filter(({ address }) => address === selectedTokenAddress)[0]
|
const selectedToken = tokens.filter(({ address }) => address === selectedTokenAddress)[0]
|
||||||
const sendToken = state.metamask.send.token
|
const sendToken = state.metamask.send && state.metamask.send.token
|
||||||
|
|
||||||
return selectedToken || sendToken || null
|
return selectedToken || sendToken || null
|
||||||
}
|
}
|
||||||
@ -314,3 +315,15 @@ function preferencesSelector ({ metamask }) {
|
|||||||
function getAdvancedInlineGasShown (state) {
|
function getAdvancedInlineGasShown (state) {
|
||||||
return Boolean(state.metamask.featureFlags.advancedInlineGas)
|
return Boolean(state.metamask.featureFlags.advancedInlineGas)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getMetaMetricState (state) {
|
||||||
|
return {
|
||||||
|
network: getCurrentNetworkId(state),
|
||||||
|
activeCurrency: getSelectedAsset(state),
|
||||||
|
accountType: getAccountType(state),
|
||||||
|
metaMetricsId: state.metamask.metaMetricsId,
|
||||||
|
numberOfTokens: getNumberOfTokens(state),
|
||||||
|
numberOfAccounts: getNumberOfAccounts(state),
|
||||||
|
participateInMetaMetrics: state.metamask.participateInMetaMetrics,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user