Convert crash reporter plugin to Sandy (non UI only)
Summary: This diff converts the CrashReporter plugin to Sandy. The main driver is that it allows us to fix the connection management of logs in a next diff. There are few changes to highlight: * A bunch of the old unit tests are removed, as they primarily verified that persistedState abstraction works, a concept that doesn't exist anymore with Sandy (as a result all the logic in error handling and crash reporter plugin has become a lot more trivial as well) * Added additional unit tests to verify that the integration with notifications from Sandy, and the integration of crashes in combination with CrashReporter plugin works (this wasn't the case before) * Plugin errors were always suppressed in production builds of Flipper. However, that makes error reporting pretty pointless in the first place, so enabled it by default, but made it a setting in case this results in too many errors suddenly. * The integration with clicking OS crash notification -> bringing the user to a sensible place _doesn't_ work, but it didn't work before this diff either, so will address that later * This doesn't upgrade the Crash reporter UI to sandy yet, will do that later in a separate diff Changelog: Crash reporter will now report errors triggered from the device / client plugins by default. This can be disabled in settings. Reviewed By: priteshrnandgaonkar Differential Revision: D27044507 fbshipit-source-id: 8233798f5cce668d61460c948c24bdf92ed7c834
This commit is contained in:
committed by
Facebook GitHub Bot
parent
7093a932f8
commit
87c5fab607
@@ -65,26 +65,17 @@ type Params = {
|
||||
type RequestMetadata = {method: string; id: number; params: Params | undefined};
|
||||
|
||||
const handleError = (store: Store, device: BaseDevice, error: ErrorType) => {
|
||||
if (isProduction()) {
|
||||
if (store.getState().settingsState.suppressPluginErrors) {
|
||||
return;
|
||||
}
|
||||
const crashReporterPlugin: typeof FlipperDevicePlugin = store
|
||||
.getState()
|
||||
.plugins.devicePlugins.get('CrashReporter') as any;
|
||||
const crashReporterPlugin = device.sandyPluginStates.get('CrashReporter');
|
||||
if (!crashReporterPlugin) {
|
||||
return;
|
||||
}
|
||||
if (!crashReporterPlugin.persistedStateReducer) {
|
||||
console.error('CrashReporterPlugin persistedStateReducer broken'); // Make sure we update this code if we ever convert it to Sandy
|
||||
if (!crashReporterPlugin.instanceApi.reportCrash) {
|
||||
console.error('CrashReporterPlugin persistedStateReducer broken');
|
||||
return;
|
||||
}
|
||||
|
||||
const pluginKey = getPluginKey(null, device, 'CrashReporter');
|
||||
|
||||
const persistedState = {
|
||||
...crashReporterPlugin.defaultPersistedState,
|
||||
...store.getState().pluginStates[pluginKey],
|
||||
};
|
||||
const isCrashReport: boolean = Boolean(error.name || error.message);
|
||||
const payload = isCrashReport
|
||||
? {
|
||||
@@ -96,23 +87,7 @@ const handleError = (store: Store, device: BaseDevice, error: ErrorType) => {
|
||||
name: 'Plugin Error',
|
||||
reason: JSON.stringify(error),
|
||||
};
|
||||
|
||||
const newPluginState =
|
||||
crashReporterPlugin.persistedStateReducer == null
|
||||
? persistedState
|
||||
: crashReporterPlugin.persistedStateReducer(
|
||||
persistedState,
|
||||
'flipper-crash-report',
|
||||
payload,
|
||||
);
|
||||
if (persistedState !== newPluginState) {
|
||||
store.dispatch(
|
||||
setPluginState({
|
||||
pluginKey,
|
||||
state: newPluginState,
|
||||
}),
|
||||
);
|
||||
}
|
||||
crashReporterPlugin.instanceApi.reportCrash(payload);
|
||||
};
|
||||
|
||||
export interface FlipperClientConnection<D, M> {
|
||||
|
||||
Reference in New Issue
Block a user