diff --git a/desktop/app/src/PluginContainer.tsx b/desktop/app/src/PluginContainer.tsx index 3fd1b9669..32eee1b58 100644 --- a/desktop/app/src/PluginContainer.tsx +++ b/desktop/app/src/PluginContainer.tsx @@ -55,6 +55,7 @@ import {InstalledPluginDetails} from 'plugin-lib'; import semver from 'semver'; import {activatePlugin} from './reducers/pluginManager'; import {produce} from 'immer'; +import {reportUsage} from './utils/metrics'; const {Text, Link} = Typography; @@ -382,6 +383,13 @@ class PluginContainer extends PureComponent { reloadPlugin() { const {activatePlugin, latestInstalledVersion} = this.props; if (latestInstalledVersion) { + reportUsage( + 'plugin-auto-update:alert:reloadClicked', + { + version: latestInstalledVersion.version, + }, + latestInstalledVersion.id, + ); activatePlugin({ plugin: latestInstalledVersion, enable: false, diff --git a/desktop/app/src/dispatcher/pluginDownloads.tsx b/desktop/app/src/dispatcher/pluginDownloads.tsx index b6977cc0a..ca9a623ca 100644 --- a/desktop/app/src/dispatcher/pluginDownloads.tsx +++ b/desktop/app/src/dispatcher/pluginDownloads.tsx @@ -30,7 +30,7 @@ import {requirePlugin} from './plugins'; import {registerPluginUpdate, selectPlugin} from '../reducers/connections'; import {Button} from 'antd'; import React from 'react'; -import {reportUsage} from '../utils/metrics'; +import {reportPlatformFailures, reportUsage} from '../utils/metrics'; import {addNotification, removeNotification} from '../reducers/notifications'; import reloadFlipper from '../utils/reloadFlipper'; import {activatePlugin, pluginInstalled} from '../reducers/pluginManager'; @@ -55,7 +55,22 @@ export default (store: Store) => { (state, store) => { for (const download of Object.values(state)) { if (download.status === PluginDownloadStatus.QUEUED) { - handlePluginDownload(download.plugin, download.startedByUser, store); + reportUsage( + 'plugin-auto-update:download', + { + version: download.plugin.version, + startedByUser: download.startedByUser ? '1' : '0', + }, + download.plugin.id, + ); + reportPlatformFailures( + handlePluginDownload( + download.plugin, + download.startedByUser, + store, + ), + 'plugin-auto-update:download', + ).catch(() => {}); } } }, @@ -145,6 +160,7 @@ async function handlePluginDownload( `Failed to download plugin "${title}" v${version}.`, ); } + throw error; } finally { dispatch(pluginDownloadFinished({plugin})); await fs.remove(tmpDir); diff --git a/desktop/app/src/dispatcher/pluginManager.tsx b/desktop/app/src/dispatcher/pluginManager.tsx index 06d4e9257..c64095766 100644 --- a/desktop/app/src/dispatcher/pluginManager.tsx +++ b/desktop/app/src/dispatcher/pluginManager.tsx @@ -22,6 +22,7 @@ import {sideEffect} from '../utils/sideEffect'; import {requirePlugin} from './plugins'; import {registerPluginUpdate} from '../reducers/connections'; import {showErrorNotification} from '../utils/notifications'; +import {reportUsage} from '../utils/metrics'; const maxInstalledPluginVersionsToKeep = 2; @@ -47,6 +48,15 @@ export default (store: Store, _logger: Logger) => { (queue, store) => { for (const request of queue) { try { + reportUsage( + 'plugin:activate', + { + version: request.plugin.version, + enable: request.enable ? '1' : '0', + notifyIfFailed: request.notifyIfFailed ? '1' : '0', + }, + request.plugin.id, + ); const plugin = requirePlugin(request.plugin); const enablePlugin = request.enable; store.dispatch( diff --git a/desktop/app/src/dispatcher/plugins.tsx b/desktop/app/src/dispatcher/plugins.tsx index 5cc077fc0..5a855c24b 100644 --- a/desktop/app/src/dispatcher/plugins.tsx +++ b/desktop/app/src/dispatcher/plugins.tsx @@ -223,6 +223,13 @@ export const requirePlugin = ( pluginDetails: ActivatablePluginDetails, reqFn: Function = global.electronRequire, ): PluginDefinition => { + reportUsage( + 'plugin:load', + { + version: pluginDetails.version, + }, + pluginDetails.id, + ); return tryCatchReportPluginFailures( () => requirePluginInternal(pluginDetails, reqFn), 'plugin:load', diff --git a/desktop/app/src/sandy-chrome/appinspect/PluginList.tsx b/desktop/app/src/sandy-chrome/appinspect/PluginList.tsx index c19264317..59794cf91 100644 --- a/desktop/app/src/sandy-chrome/appinspect/PluginList.tsx +++ b/desktop/app/src/sandy-chrome/appinspect/PluginList.tsx @@ -38,6 +38,7 @@ import { import {activatePlugin, uninstallPlugin} from '../../reducers/pluginManager'; import {BundledPluginDetails} from 'plugin-lib/lib'; import {filterNewestVersionOfEachPlugin} from '../../dispatcher/plugins'; +import {reportUsage} from '../../utils/metrics'; const {SubMenu} = Menu; const {Text} = Typography; @@ -134,6 +135,7 @@ export const PluginList = memo(function PluginList({ const handleInstallPlugin = useCallback( (id: string) => { const plugin = downloadablePlugins.find((p) => p.id === id)!; + reportUsage('plugin:install', {version: plugin.version}, plugin.id); if (plugin.isBundled) { dispatch(activatePlugin({plugin, enable: true, notifyIfFailed: true})); } else { @@ -145,6 +147,7 @@ export const PluginList = memo(function PluginList({ const handleUninstallPlugin = useCallback( (id: string) => { const plugin = disabledPlugins.find((p) => p.id === id)!; + reportUsage('plugin:uninstall', {version: plugin.version}, plugin.id); dispatch(uninstallPlugin(plugin)); }, [disabledPlugins, dispatch],