Move metrics / tracking / error analysis to flipper-common package

Summary:
what else can I say

move_complexity

Reviewed By: passy

Differential Revision: D31483414

fbshipit-source-id: 1692c792121a3aae0843eb238040cae0445cdf54
This commit is contained in:
Michel Weststrate
2021-10-12 15:59:44 -07:00
committed by Facebook GitHub Bot
parent 51bfc8f05d
commit 3e7a6b1b4b
35 changed files with 102 additions and 40 deletions

View File

@@ -15,7 +15,7 @@ import BaseDevice from './devices/BaseDevice';
import {Logger} from 'flipper-common';
import {Store} from './reducers/index';
import {performance} from 'perf_hooks';
import {reportPluginFailures} from './utils/metrics';
import {reportPluginFailures} from 'flipper-common';
import {default as isProduction} from './utils/isProduction';
import {EventEmitter} from 'events';
import invariant from 'invariant';

View File

@@ -46,7 +46,7 @@ import {InstalledPluginDetails} from 'flipper-plugin-lib';
import semver from 'semver';
import {loadPlugin} from './reducers/pluginManager';
import {produce} from 'immer';
import {reportUsage} from './utils/metrics';
import {reportUsage} from 'flipper-common';
import {PluginInfo} from './chrome/fb-stubs/PluginInfo';
import {getActiveClient, getActivePlugin} from './selectors/connections';
import {AnyAction} from 'redux';

View File

@@ -11,7 +11,7 @@ import {Markdown} from '../ui';
import {readFileSync} from 'fs';
import React, {Component} from 'react';
import path from 'path';
import {reportUsage} from '../utils/metrics';
import {reportUsage} from 'flipper-common';
import {getChangelogPath} from '../utils/pathUtils';
import {Modal} from 'antd';
import {theme} from 'flipper-plugin';

View File

@@ -38,7 +38,7 @@ import runHealthchecks, {
HealthcheckEventsHandler,
} from '../utils/runHealthchecks';
import {getFlipperLib} from 'flipper-plugin';
import {reportUsage} from '../utils/metrics';
import {reportUsage} from 'flipper-common';
type StateFromProps = {
healthcheckReport: HealthcheckReport;

View File

@@ -32,7 +32,7 @@ import {Popover, Rate} from 'antd';
import {useStore} from '../utils/useStore';
import {isLoggedIn} from '../fb-stubs/user';
import {useValue} from 'flipper-plugin';
import {reportPlatformFailures} from '../utils/metrics';
import {reportPlatformFailures} from 'flipper-common';
type NextAction = 'select-rating' | 'leave-comment' | 'finished';

View File

@@ -25,7 +25,7 @@ import KeyboardShortcutInput from './settings/KeyboardShortcutInput';
import {isEqual, isMatch, isEmpty} from 'lodash';
import restartFlipper from '../utils/restartFlipper';
import LauncherSettingsPanel from '../fb-stubs/LauncherSettingsPanel';
import {reportUsage} from '../utils/metrics';
import {reportUsage} from 'flipper-common';
import {Modal, message, Button} from 'antd';
import {Layout, withTrackingScope, _NuxManagerContext} from 'flipper-plugin';

View File

@@ -9,7 +9,7 @@
import {FlexColumn, Button, styled, Text, FlexRow, Spacer} from '../ui';
import React, {Component} from 'react';
import {reportPlatformFailures} from '../utils/metrics';
import {reportPlatformFailures} from 'flipper-common';
import {performance} from 'perf_hooks';
import {Logger} from 'flipper-common';
import {IdlerImpl} from '../utils/Idler';

View File

@@ -23,7 +23,7 @@ import {
displayFetchMetadataErrors,
} from '../utils/exportData';
import ShareSheetErrorList from './ShareSheetErrorList';
import {reportPlatformFailures} from '../utils/metrics';
import {reportPlatformFailures} from 'flipper-common';
import {performance} from 'perf_hooks';
import ShareSheetPendingDialog from './ShareSheetPendingDialog';
import {getLogger} from 'flipper-common';

View File

@@ -9,7 +9,7 @@
import {notification, Typography} from 'antd';
import isProduction from '../utils/isProduction';
import {reportPlatformFailures} from '../utils/metrics';
import {reportPlatformFailures} from 'flipper-common';
import React, {useEffect, useState} from 'react';
import fbConfig from '../fb-stubs/config';
import {useStore} from '../utils/useStore';

View File

@@ -10,7 +10,7 @@
import {Layout, theme} from 'flipper-plugin';
import {LoadingIndicator, TableRows, ManagedTable, Glyph} from '../../ui';
import React, {useCallback, useState, useEffect} from 'react';
import {reportPlatformFailures, reportUsage} from '../../utils/metrics';
import {reportPlatformFailures, reportUsage} from 'flipper-common';
import reloadFlipper from '../../utils/reloadFlipper';
import {registerInstalledPlugins} from '../../reducers/plugins';
import {

View File

@@ -17,7 +17,7 @@ import {
importFileToStore,
IMPORT_FLIPPER_TRACE_EVENT,
} from '../utils/exportData';
import {tryCatchReportPlatformFailures} from '../utils/metrics';
import {tryCatchReportPlatformFailures} from 'flipper-common';
import {handleDeeplink} from '../deeplink';
import {Dialog} from 'flipper-plugin';

View File

@@ -19,7 +19,7 @@ import Client from '../Client';
import {notification} from 'antd';
import BaseDevice from '../devices/BaseDevice';
import {ClientDescription, timeout} from 'flipper-common';
import {reportPlatformFailures} from '../utils/metrics';
import {reportPlatformFailures} from 'flipper-common';
import {sideEffect} from '../utils/sideEffect';
export default async (store: Store, logger: Logger) => {

View File

@@ -14,7 +14,7 @@ import {getUser} from '../fb-stubs/user';
import {State, Store} from '../reducers/index';
import {checkForUpdate} from '../fb-stubs/checkForUpdate';
import {getAppVersion} from '../utils/info';
import {UserNotSignedInError} from '../utils/errors';
import {UserNotSignedInError} from 'flipper-common';
import {selectPlugin, setPluginEnabled} from '../reducers/connections';
import {getUpdateAvailableMessage} from '../chrome/UpdateIndicator';
import {Typography} from 'antd';

View File

@@ -26,7 +26,7 @@ import fs from 'fs-extra';
import path from 'path';
import tmp from 'tmp';
import {promisify} from 'util';
import {reportPlatformFailures, reportUsage} from '../utils/metrics';
import {reportPlatformFailures, reportUsage} from 'flipper-common';
import {loadPlugin} from '../reducers/pluginManager';
import {showErrorNotification} from '../utils/notifications';
import {pluginInstalled} from '../reducers/plugins';

View File

@@ -37,7 +37,7 @@ import {
BundledPluginDetails,
ConcretePluginDetails,
} from 'flipper-plugin-lib';
import {tryCatchReportPluginFailures, reportUsage} from '../utils/metrics';
import {tryCatchReportPluginFailures, reportUsage} from 'flipper-common';
import * as FlipperPluginSDK from 'flipper-plugin';
import {_SandyPluginDefinition} from 'flipper-plugin';
import loadDynamicPlugins from '../utils/loadDynamicPlugins';

View File

@@ -8,10 +8,7 @@
*/
import {Store} from '../../reducers/index';
import {
getErrorFromErrorLike,
getStringFromErrorLike,
} from '../../utils/errors';
import {getErrorFromErrorLike, getStringFromErrorLike} from 'flipper-common';
import {LoggerArgs, Logger} from 'flipper-common';
const instance = {

View File

@@ -26,7 +26,7 @@ export {
export {FlipperPlugin, FlipperDevicePlugin, BaseAction} from './plugin';
export {PluginClient, Props} from './plugin';
export {default as Client} from './Client';
export {reportUsage} from './utils/metrics';
export {reportUsage} from 'flipper-common';
export {default as promiseTimeout} from './utils/promiseTimeout';
export {clipboard, remote, OpenDialogOptions} from 'electron';
export {bufferToBlob} from './utils/screenshot';

View File

@@ -52,7 +52,8 @@ import {PersistGate} from 'redux-persist/integration/react';
// eslint-disable-next-line flipper/no-electron-remote-imports
import {ipcRenderer, remote} from 'electron';
import {helloWorld} from 'flipper-server-core';
import {setLoggerInstance} from 'flipper-common';
import {setLoggerInstance, setUserSessionManagerInstance} from 'flipper-common';
import {internGraphPOSTAPIRequest} from './fb-stubs/user';
helloWorld();
@@ -207,6 +208,10 @@ function init() {
else console.warn(msg, r.error);
}
});
setUserSessionManagerInstance({
internGraphPOSTAPIRequest,
});
ReactDOM.render(
<AppFrame logger={logger} persistor={persistor} />,
document.getElementById('root'),

View File

@@ -10,7 +10,7 @@
import {Notification} from 'flipper-plugin';
import {Actions} from './';
import React from 'react';
import {getStringFromErrorLike} from '../utils/errors';
import {getStringFromErrorLike} from 'flipper-common';
export const GLOBAL_NOTIFICATION_PLUGIN_ID = 'Flipper';

View File

@@ -16,7 +16,7 @@ import {selectedPlugins as setSelectedPlugins} from './plugins';
import {addStatusMessage, removeStatusMessage} from './application';
import constants from '../fb-stubs/constants';
import {getLogger} from 'flipper-common';
import {logPlatformSuccessRate} from '../utils/metrics';
import {logPlatformSuccessRate} from 'flipper-common';
export const SUPPORT_FORM_PREFIX = 'support-form-v2';
import {getExportablePlugins} from '../selectors/connections';
import {DeviceOS} from 'flipper-plugin';

View File

@@ -34,7 +34,7 @@ import {
} from '../reducers/healthchecks';
import runHealthchecks from '../utils/runHealthchecks';
import {Healthchecks} from 'flipper-doctor';
import {reportUsage} from '../utils/metrics';
import {reportUsage} from 'flipper-common';
const {Title, Paragraph, Text} = Typography;

View File

@@ -36,7 +36,7 @@ import {
uninstallPlugin,
} from '../../reducers/pluginManager';
import {BundledPluginDetails} from 'flipper-plugin-lib';
import {reportUsage} from '../../utils/metrics';
import {reportUsage} from 'flipper-common';
import ConnectivityStatus from './fb-stubs/ConnectivityStatus';
import {useSelector} from 'react-redux';
import {getPluginLists} from '../../selectors/connections';

View File

@@ -13,7 +13,7 @@ import {ClientDescription, ClientQuery, isTest} from 'flipper-common';
import CertificateProvider from '../utils/CertificateProvider';
import {ClientConnection, ConnectionStatus} from './ClientConnection';
import {UninitializedClient} from 'flipper-common';
import {reportPlatformFailures} from '../../utils/metrics';
import {reportPlatformFailures} from 'flipper-common';
import {EventEmitter} from 'events';
import invariant from 'invariant';
import GK from '../../fb-stubs/GK';

View File

@@ -7,7 +7,7 @@
* @format
*/
import {reportPlatformFailures} from '../../../utils/metrics';
import {reportPlatformFailures} from 'flipper-common';
import {execFile} from 'promisify-child-process';
import adbConfig from './adbConfig';
import adbkit, {Client} from 'adbkit';

View File

@@ -7,7 +7,7 @@
* @format
*/
import {UnsupportedError} from '../../../utils/metrics';
import {UnsupportedError} from 'flipper-common';
import adbkit, {Client} from 'adbkit';
const allowedAppNameRegex = /^[\w.-]+$/;

View File

@@ -10,7 +10,7 @@
import React from 'react';
import {Mutex} from 'async-mutex';
import {exec as unsafeExec, Output} from 'promisify-child-process';
import {reportPlatformFailures} from '../../../utils/metrics';
import {reportPlatformFailures} from 'flipper-common';
import {promises, constants} from 'fs';
import memoize from 'lodash.memoize';
import {notNull} from '../../utils/typeUtils';

View File

@@ -8,7 +8,7 @@
*/
import {Logger} from 'flipper-common';
import {internGraphPOSTAPIRequest} from '../../fb-stubs/user';
import {internGraphPOSTAPIRequest} from 'flipper-common';
import ServerController from '../comms/ServerController';
import {promisify} from 'util';
import fs from 'fs-extra';
@@ -20,7 +20,7 @@ import {
import path from 'path';
import tmp, {DirOptions, FileOptions} from 'tmp';
import iosUtil from '../devices/ios/iOSContainerUtility';
import {reportPlatformFailures} from '../../utils/metrics';
import {reportPlatformFailures} from 'flipper-common';
import {getAdbClient} from '../devices/android/adbClient';
import * as androidUtil from '../devices/android/androidContainerUtility';
import os from 'os';
@@ -113,7 +113,7 @@ export default class CertificateProvider {
this.logger = logger;
// TODO: refactor this code to create promise lazily
this._adb = config.enableAndroid
? (getAdbClient(config).catch((e) => {
? (getAdbClient(config).catch((_e) => {
// make sure initialization failure is already logged
const msg =
'Failed to initialize ADB. Please disable Android support in settings, or configure a correct path';

View File

@@ -7,7 +7,7 @@
* @format
*/
import {CancelledPromiseError} from './errors';
import {CancelledPromiseError} from 'flipper-common';
import {Idler, sleep} from 'flipper-plugin';
export class IdlerImpl implements Idler {

View File

@@ -26,7 +26,7 @@ import fs from 'fs';
import {v4 as uuidv4} from 'uuid';
import {remote, OpenDialogOptions} from 'electron';
import {readCurrentRevision} from './packageMetadata';
import {tryCatchReportPlatformFailures} from './metrics';
import {tryCatchReportPlatformFailures} from 'flipper-common';
import {promisify} from 'util';
import {TestIdler} from './Idler';
import {setStaticView} from '../reducers/connections';

View File

@@ -9,7 +9,7 @@
import {HealthcheckResult} from '../reducers/healthchecks';
import {getHealthchecks, getEnvInfo, Healthchecks} from 'flipper-doctor';
import {logPlatformSuccessRate, reportPlatformFailures} from '../utils/metrics';
import {logPlatformSuccessRate, reportPlatformFailures} from 'flipper-common';
let healthcheckIsRunning: boolean;
let runningHealthcheck: Promise<void>;

View File

@@ -10,7 +10,7 @@
import fs from 'fs';
import path from 'path';
import BaseDevice from '../devices/BaseDevice';
import {reportPlatformFailures} from './metrics';
import {reportPlatformFailures} from 'flipper-common';
import expandTilde from 'expand-tilde';
import {remote} from 'electron';
import config from '../utils/processConfig';

View File

@@ -20,3 +20,24 @@ export * from './server-types';
export {sleep} from './utils/sleep';
export {timeout} from './utils/timeout';
export {isTest} from './utils/isTest';
export {
logPlatformSuccessRate,
reportPlatformFailures,
reportUsage,
reportPluginFailures,
tryCatchReportPlatformFailures,
tryCatchReportPluginFailures,
UnsupportedError,
} from './utils/metrics';
export {
ConnectivityError,
CancelledPromiseError,
UserUnauthorizedError,
UserNotSignedInError,
isConnectivityOrAuthError,
isError,
isAuthError,
getStringFromErrorLike,
getErrorFromErrorLike,
} from './utils/errors';
export * from './user-session';

View File

@@ -0,0 +1,41 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
/**
* APIs need to integration with Facebook services.
*/
export type UserSessionManager = {
internGraphPOSTAPIRequest: typeof internGraphPOSTAPIRequest;
};
let instance: UserSessionManager | undefined = undefined;
function getInstance(): UserSessionManager {
if (!instance) {
throw new Error('UserSessionManager not available or implemented');
}
return instance;
}
export function setUserSessionManagerInstance(i: UserSessionManager) {
instance = i;
}
export async function internGraphPOSTAPIRequest(
_endpoint: string,
_formFields: {
[key: string]: any;
} = {},
_internGraphUrl?: string,
_timeout?: number,
): Promise<any> {
// eslint-disable-next-line
return getInstance().internGraphPOSTAPIRequest.apply(null, arguments as any);
}

View File

@@ -7,8 +7,6 @@
* @format
*/
import {InteractionReport} from 'flipper-plugin';
export function isAuthError(
err: any,
): err is UserNotSignedInError | UserUnauthorizedError {
@@ -61,7 +59,7 @@ export class UserNotSignedInError extends Error {
declare global {
interface Error {
interaction?: InteractionReport;
interaction?: unknown;
}
}

View File

@@ -7,8 +7,8 @@
* @format
*/
import {getLogger} from 'flipper-common';
import {CancelledPromiseError, isError} from './errors';
import {getLogger} from './Logger';
type Result =
| {kind: 'success'}