Analytics events for plugin management
Summary: Send some analytics events related to plugin management: auto-update, install, uninstall, load. Reviewed By: passy Differential Revision: D25557788 fbshipit-source-id: 14dc9ae5793e9b18be13f2d483069d8d00c8b863
This commit is contained in:
committed by
Facebook GitHub Bot
parent
31ace3bd09
commit
3a65f86c68
@@ -55,6 +55,7 @@ import {InstalledPluginDetails} from 'plugin-lib';
|
|||||||
import semver from 'semver';
|
import semver from 'semver';
|
||||||
import {activatePlugin} from './reducers/pluginManager';
|
import {activatePlugin} from './reducers/pluginManager';
|
||||||
import {produce} from 'immer';
|
import {produce} from 'immer';
|
||||||
|
import {reportUsage} from './utils/metrics';
|
||||||
|
|
||||||
const {Text, Link} = Typography;
|
const {Text, Link} = Typography;
|
||||||
|
|
||||||
@@ -382,6 +383,13 @@ class PluginContainer extends PureComponent<Props, State> {
|
|||||||
reloadPlugin() {
|
reloadPlugin() {
|
||||||
const {activatePlugin, latestInstalledVersion} = this.props;
|
const {activatePlugin, latestInstalledVersion} = this.props;
|
||||||
if (latestInstalledVersion) {
|
if (latestInstalledVersion) {
|
||||||
|
reportUsage(
|
||||||
|
'plugin-auto-update:alert:reloadClicked',
|
||||||
|
{
|
||||||
|
version: latestInstalledVersion.version,
|
||||||
|
},
|
||||||
|
latestInstalledVersion.id,
|
||||||
|
);
|
||||||
activatePlugin({
|
activatePlugin({
|
||||||
plugin: latestInstalledVersion,
|
plugin: latestInstalledVersion,
|
||||||
enable: false,
|
enable: false,
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import {requirePlugin} from './plugins';
|
|||||||
import {registerPluginUpdate, selectPlugin} from '../reducers/connections';
|
import {registerPluginUpdate, selectPlugin} from '../reducers/connections';
|
||||||
import {Button} from 'antd';
|
import {Button} from 'antd';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {reportUsage} from '../utils/metrics';
|
import {reportPlatformFailures, reportUsage} from '../utils/metrics';
|
||||||
import {addNotification, removeNotification} from '../reducers/notifications';
|
import {addNotification, removeNotification} from '../reducers/notifications';
|
||||||
import reloadFlipper from '../utils/reloadFlipper';
|
import reloadFlipper from '../utils/reloadFlipper';
|
||||||
import {activatePlugin, pluginInstalled} from '../reducers/pluginManager';
|
import {activatePlugin, pluginInstalled} from '../reducers/pluginManager';
|
||||||
@@ -55,7 +55,22 @@ export default (store: Store) => {
|
|||||||
(state, store) => {
|
(state, store) => {
|
||||||
for (const download of Object.values(state)) {
|
for (const download of Object.values(state)) {
|
||||||
if (download.status === PluginDownloadStatus.QUEUED) {
|
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}.`,
|
`Failed to download plugin "${title}" v${version}.`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
throw error;
|
||||||
} finally {
|
} finally {
|
||||||
dispatch(pluginDownloadFinished({plugin}));
|
dispatch(pluginDownloadFinished({plugin}));
|
||||||
await fs.remove(tmpDir);
|
await fs.remove(tmpDir);
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import {sideEffect} from '../utils/sideEffect';
|
|||||||
import {requirePlugin} from './plugins';
|
import {requirePlugin} from './plugins';
|
||||||
import {registerPluginUpdate} from '../reducers/connections';
|
import {registerPluginUpdate} from '../reducers/connections';
|
||||||
import {showErrorNotification} from '../utils/notifications';
|
import {showErrorNotification} from '../utils/notifications';
|
||||||
|
import {reportUsage} from '../utils/metrics';
|
||||||
|
|
||||||
const maxInstalledPluginVersionsToKeep = 2;
|
const maxInstalledPluginVersionsToKeep = 2;
|
||||||
|
|
||||||
@@ -47,6 +48,15 @@ export default (store: Store, _logger: Logger) => {
|
|||||||
(queue, store) => {
|
(queue, store) => {
|
||||||
for (const request of queue) {
|
for (const request of queue) {
|
||||||
try {
|
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 plugin = requirePlugin(request.plugin);
|
||||||
const enablePlugin = request.enable;
|
const enablePlugin = request.enable;
|
||||||
store.dispatch(
|
store.dispatch(
|
||||||
|
|||||||
@@ -223,6 +223,13 @@ export const requirePlugin = (
|
|||||||
pluginDetails: ActivatablePluginDetails,
|
pluginDetails: ActivatablePluginDetails,
|
||||||
reqFn: Function = global.electronRequire,
|
reqFn: Function = global.electronRequire,
|
||||||
): PluginDefinition => {
|
): PluginDefinition => {
|
||||||
|
reportUsage(
|
||||||
|
'plugin:load',
|
||||||
|
{
|
||||||
|
version: pluginDetails.version,
|
||||||
|
},
|
||||||
|
pluginDetails.id,
|
||||||
|
);
|
||||||
return tryCatchReportPluginFailures(
|
return tryCatchReportPluginFailures(
|
||||||
() => requirePluginInternal(pluginDetails, reqFn),
|
() => requirePluginInternal(pluginDetails, reqFn),
|
||||||
'plugin:load',
|
'plugin:load',
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import {
|
|||||||
import {activatePlugin, uninstallPlugin} from '../../reducers/pluginManager';
|
import {activatePlugin, uninstallPlugin} from '../../reducers/pluginManager';
|
||||||
import {BundledPluginDetails} from 'plugin-lib/lib';
|
import {BundledPluginDetails} from 'plugin-lib/lib';
|
||||||
import {filterNewestVersionOfEachPlugin} from '../../dispatcher/plugins';
|
import {filterNewestVersionOfEachPlugin} from '../../dispatcher/plugins';
|
||||||
|
import {reportUsage} from '../../utils/metrics';
|
||||||
|
|
||||||
const {SubMenu} = Menu;
|
const {SubMenu} = Menu;
|
||||||
const {Text} = Typography;
|
const {Text} = Typography;
|
||||||
@@ -134,6 +135,7 @@ export const PluginList = memo(function PluginList({
|
|||||||
const handleInstallPlugin = useCallback(
|
const handleInstallPlugin = useCallback(
|
||||||
(id: string) => {
|
(id: string) => {
|
||||||
const plugin = downloadablePlugins.find((p) => p.id === id)!;
|
const plugin = downloadablePlugins.find((p) => p.id === id)!;
|
||||||
|
reportUsage('plugin:install', {version: plugin.version}, plugin.id);
|
||||||
if (plugin.isBundled) {
|
if (plugin.isBundled) {
|
||||||
dispatch(activatePlugin({plugin, enable: true, notifyIfFailed: true}));
|
dispatch(activatePlugin({plugin, enable: true, notifyIfFailed: true}));
|
||||||
} else {
|
} else {
|
||||||
@@ -145,6 +147,7 @@ export const PluginList = memo(function PluginList({
|
|||||||
const handleUninstallPlugin = useCallback(
|
const handleUninstallPlugin = useCallback(
|
||||||
(id: string) => {
|
(id: string) => {
|
||||||
const plugin = disabledPlugins.find((p) => p.id === id)!;
|
const plugin = disabledPlugins.find((p) => p.id === id)!;
|
||||||
|
reportUsage('plugin:uninstall', {version: plugin.version}, plugin.id);
|
||||||
dispatch(uninstallPlugin(plugin));
|
dispatch(uninstallPlugin(plugin));
|
||||||
},
|
},
|
||||||
[disabledPlugins, dispatch],
|
[disabledPlugins, dispatch],
|
||||||
|
|||||||
Reference in New Issue
Block a user