Summary:
Add a desktop device on MacOS similar to WindowsDevice (see D8861986).
This makes it possible to view Oculus Service Log files on MacOS too.
Reviewed By: danielbuechele
Differential Revision: D15147501
fbshipit-source-id: 8a076964e6111bf3786818b7cbd8bb7f81c1498d
Summary: emulator isn't on the path in CI machines, but we already have ANDROID_HOME set so we can work out where it is.
Reviewed By: danielbuechele
Differential Revision: D15080422
fbshipit-source-id: 2c50a3de27909d2bfc82ea0210d06a0cc32357d7
Summary:
This was originally introduced so we could squash multiple instances of the same error at the client side and only report one instance of them.
Now we've moved to doing the aggregation server side, which is more powerful, so this is no longer necessary. We've also seen a case of these Error objects appearing opaque making it hard to see the underlying problem, so removing it entirely.
Reviewed By: passy
Differential Revision: D14576715
fbshipit-source-id: b285dcb5249e209f9008a14ac6a2f226f3aa82d7
Summary: Should also fix the build.
Reviewed By: jknoxville
Differential Revision: D14477777
fbshipit-source-id: 01fcfb2321c9b7a12acdf079473d91b6805d4dda
Summary: This is required on linux or it isn't found. It's already done elsewhere this way.
Reviewed By: passy
Differential Revision: D14303606
fbshipit-source-id: 8b3fca776d43076cdc2f814de19b0b381350dcc9
Summary:
Adding support for downloading archived Flipper data using a URL handler.
A URL looks like `flipper://import/?url=` and will download the file specified in the url param. While downloading the file, a spinner is shown in the app's titlebar.
Reviewed By: jknoxville
Differential Revision: D14262763
fbshipit-source-id: 6538fc78c07a48cef7b71b3f7bdbcb712d054593
Summary: Allows the created client to be reused.
Reviewed By: passy
Differential Revision: D14241449
fbshipit-source-id: 6bbb64eeb708dce9c24e4581e8480d19af998e47
Summary:
Currently when a client connects, if there's no matching device we know of, it emits an error.
The problem is that there's a race between clients connecting and devices being detected, if the client connects first, then we'll emit this error, even though the device is displayed shortly afterwards.
Fixing this by waiting 2 seconds after a client connects, and then if it's still connected, checking for a matching device. This should be enough time to make this error more reliable.
Reviewed By: passy
Differential Revision: D14126315
fbshipit-source-id: c81b2c6d9a6e0639a656d1a4d7a8f999f715bfbf
Summary:
Unified all imports of Logger. Some were called LogManager before.
Now the fb-stub and the fb variants use the same interface.
Constructor of Logger is no longer exposed so it can't be initialized twice, unless in the case you're explicitly using the fb variant, which has extra functionality.
Reviewed By: danielbuechele
Differential Revision: D14083929
fbshipit-source-id: 9b61a06e1264d5f142b5a9188465c99deaf18193
Summary: This diff imports and exports data in a `.flipper` file extension. This diff also adds the support to open flipper app by double clicking on the `.flipper` file.
Reviewed By: danielbuechele
Differential Revision: D14042846
fbshipit-source-id: 17e6b55bf2796d9abdf985411fce799600f7792b
Summary: So we can see usage of old sdks.
Reviewed By: passy
Differential Revision: D14022623
fbshipit-source-id: 22f0681cbf4374e2cf3256e1049d154789e1959e
Summary: support for DEVICE_SET_PATH as used by 1W
Reviewed By: passy
Differential Revision: D14007285
fbshipit-source-id: 79f40355020c67efcb439f470af2fc35ec7fea7e
Summary: While running in dev mode, there are no bundled plugins. This was causing an error messages being logged. Now we early return an empty array to prevent the error.
Reviewed By: passy
Differential Revision: D13971930
fbshipit-source-id: 4110a3ea5d6d2e60b3de17a43d497a3727b8e441
Summary:
Moves the JSON config access to one module instead of
ad-hoc de-serialising the object all over the place.
This also adds a type for it so we hopefully won't typo things that easily.
Reviewed By: danielbuechele
Differential Revision: D13956612
fbshipit-source-id: 48098deafedf18cc86c8802a3c40fba9394b8262
Summary:
For the electron build, plugins are bundled with the app and loaded from there at launch. The headless version can't require from its binary, so plugins need to be required from another path.
This diff makes the path where bundled plugins are loaded from adjustable via an environment variable: `BUNDLED_PLUGIN_PATH`. If it's set, the plugins are loaded from this path, otherwise we default to the old behaviour of including them from `./defaultPlugins`.
For the headless version we expect the plugins to be in a folder called `plugins` next to the executable. This should later be configurable via an argument passed to the CLI.
Reviewed By: passy
Differential Revision: D13843676
fbshipit-source-id: 04237ae6631b4f2ba56887fe992a56f860724edc
Summary: Change from `recordSuccessMetric` to `reportPlatformFailures`, because the next diff adds `reportPluginFailures` and I want to distinguish the two.
Reviewed By: passy
Differential Revision: D13878380
fbshipit-source-id: 9c6b8bfe1ed2e1a8bbe5aacbec31d24e9aa39171
Summary:
The function itself can easily be pure. Let's have the side-effects
(lookup of env variable and error handling) outside of it. Also
prevents spam in the test log (which I intend to make a test failure
going forwards).
Current output:
{F149794656}
Reviewed By: jknoxville
Differential Revision: D13894995
fbshipit-source-id: dacf51f8b35cb427740f9566ef993ffc6b2c3906
Summary:
We were using `window.performance` to measure performance. This was because the equivalent node.js API `perf_hooks` wasn't available in the electron version we were using back then.
However, `perf_hooks` has landed in electron meanwhile, so I am moving to this API, as it works for the headless version and jest tests, too.
This allows us to delete the babel transform that was used for node-based tests, where the browser API was replaced with the node API
Reviewed By: jknoxville
Differential Revision: D13860133
fbshipit-source-id: cf1395004fac046dd55751ff465af494173b2cbf
Summary:
This diff adds the capability to export the flipper data to a file. With this diff you can click on the "Export Flipper" option from the "Edit" menu in menubar. It will export it in the file at this location
`~/.flipper/MessageLogs.json`
We do not exactly export the store, but just the important part of it. We export in the following format
```
{
fileVersion: '1.0',
device: {
os: 'iOS',
title: 'iPhone 7',
serial: '',
deviceType: 'physical',
},
clients: [
{
query: {
app: 'Facebook',
},
d: '12345678'
},
{
query: {
app: 'Instagram',
},
id: '12345678'
}
],
store: {
pluginState: {},
notifications: {}
}
}
```
In next diff I will add the capability to select the folder to export the file too.
Reviewed By: danielbuechele
Differential Revision: D13751963
fbshipit-source-id: 7d3d49c6adf8145b2181d2332c7dbd589155cec3
Summary:
Fixes required to be able to run Flipper in node.js:
* Adds checks if the `window`-object exists before using it, to allow running in node.
* Imports from within Flipper should directly reference the file they are requiring instead of `import from 'flipper'`. This was done in most of the places. Fixed a few occurrences where this wasn't the case. This is to prevent cyclic dependencies in node.
* shared packages (React, ReactDOM and Flipper) were exposed on the `window` before, changed this to `global` as this works in browser and node.
* Adds some missing methods to our electron stubs (used for testing and headless Flipper)
Reviewed By: passy
Differential Revision: D13786577
fbshipit-source-id: 145d560f1446e7d0bdec2acd8dd54dae983d7b36
Summary:
We've only got about a 75% success rate at initializing an adb client: https://fburl.com/scuba/tr5tkehi
This is the second attempt to fix this. The first one D13487864 was reverted because it used 'adb' instead of the full path, and when run as a GUI app, you don't get the PATH variable typically set up in .bashrc files etc.
Fixing it by using the full $ANDROID_HOME path.
For facebook users, this will always be guessed correctly, but for OSS it could be installed anywhere, so we might get it wrong - it's common for $ANDROID_HOME to not be set at all on mac systems, and setting it for GUI apps is not exactly trivial: https://superuser.com/questions/476752/setting-environment-variables-in-os-x-for-gui-applications
Leaving the previous implementation as a fallback for OSS users and in case this method fails for some reason.
Metrics wrapped around each implementation as well as the entire thing, so we can see if it solves the issue.
Reviewed By: passy
Differential Revision: D13818981
fbshipit-source-id: d90bfd9ec80621526accc080778afc44f2a099d9
Summary:
Part 3 and final part of adding customizable ports. To use this, the iOS / Android apps have to also be started with the same custom ports.
Example usage: `FLIPPER_PORTS=8189,8188 yarn start`
Reviewed By: passy
Differential Revision: D13801761
fbshipit-source-id: 3dd80a3001ed0855e54cc568fa94eb6fac5fc7f1
Summary: Will allow us to look into bad sessions if necessary.
Reviewed By: passy
Differential Revision: D13695386
fbshipit-source-id: 2cfc8ec28ef4cb387ef7a5a58b02aa77a367ae81
Summary:
The advantage of this is that anyone can now log without needing to carry around a Logger object.
Primary reason is for making metrics less intrusive in the codebase.
Reviewed By: passy
Differential Revision: D13671368
fbshipit-source-id: 162ab1351a124683aef13983fc3bcec01385cd1a
Summary: We've seen some flakiness here, so adding this to get better visibility on it.
Reviewed By: passy
Differential Revision: D13635051
fbshipit-source-id: 98d2dcc0bb11f3afb2f27942b9f4bf241808a4fc
Summary: This diff adds a static function `onRegisterDevice` which is being called whenever an device gets registered. This callback is used to add loglisterner for android. I even moved the logic of iOS from `onRegisterPlugin` to this callback. The reason for not adding android log listener in `onRegisterPlugin` was that there were cases when baseDevice was not yet registered before calling `onRegisterPlugin`. For android, I want the instance of `BaseDevice` so that I can add logListener on it.
Reviewed By: danielbuechele
Differential Revision: D13563282
fbshipit-source-id: b5be40f3dbc808bdaeabae28423c563cf2345a22
Summary:
Original commit changeset: b1eae542aaa6
This D13487864 has broken `adb start-server` command for the production builds, thus this diff backs out the changes done by that diff.
Reviewed By: danielbuechele
Differential Revision: D13532003
fbshipit-source-id: 1d169dcdab11a52f075187803219915f444952d6
Summary: This diff refactors CrashReporter Plugin. The business logic of crash reporter plugin was placed in the `iOSDevice.js` as it gets the hook to the initialisation of iOSDevice. This diff moves the business logic to the Crash Reporter plugin files under the plugins folder. To get the hook, so that we can add our watcher, I have added a static function over `FlipperBasePlugin`, which if exists, will be called once `REGISTER_PLUGIN` event is dispatched
Reviewed By: danielbuechele
Differential Revision: D13529035
fbshipit-source-id: 28216b273b4032727859107d8a6751c6465af9ac
Summary:
If a plugin was not loaded we used to ignore it. This diff still ignores the plugins that weren't loaded, but adds some information about them to the redux store. This information is used in the PluginDebugger.
These are the three reasons, why a plugin might not be loaded.
* `gatekeepedPlugins`: Plugin was ignored because of a GK
* `failedPlugins`: Plugin could not be requried/failed to parse
* `disabledPlugins`: Plugin disabled in `~/.flipper/config.json`
Information for each them is added to the redux store.
Reviewed By: passy
Differential Revision: D13516986
fbshipit-source-id: b7a55a159cb586d1a88fbb976248131c52a909c5
Summary:
Before this diff we used to show crash notifications for all kind of crashes. This diff adds the check, which makes sure that only the crashes of a selected device is shown
Also added tests and updated few tests
Reviewed By: danielbuechele
Differential Revision: D13518019
fbshipit-source-id: 6d640d078a43480274242a5d86f2d135d875d630
Summary:
This diff adds a watcher on `~/Library/Logs/Diagnostics/` library and fires a notification whenever a crash log is added there. This will only work for iOS crashes. With this change, for iOS we should be able to see all kind of crash notification be it due to uncaught exception or a native crash or signal errors.
For android, it will still show notifications due to uncaught exceptions. In upcoming diffs, I will change the logic for android too by parsing Logcat logs.
This diff doesn't support physical device crash reporting. The crashes for physical devices are synced to other folder and that too they are symbolicated.
Reviewed By: danielbuechele
Differential Revision: D13404648
fbshipit-source-id: 7219855ebc73451af87f77f90cc3ed0f2ab5287c
Summary:
Adding the properties from a plugin's `package.json` as static properties to the class.
The name from `package.json` is used as it's `id`.
This allows us in the future to add meta information about a plugin to it's package.json and still use the data inside the app.
Reviewed By: priteshrnandgaonkar
Differential Revision: D13417288
fbshipit-source-id: 3d0a62d4cb0115153cce1aaee677b9680fefebf4
Summary: We were relying on adbkit to do this, implicitly by calling listDevices(). However, this doesn't appear to be reliable, with retries, it usually succeeds, but sometimes still doesn't. I'm aiming to avoid all this entirely by just starting it directly using adb itself, which I expect to be much more reliable.
Reviewed By: danielbuechele
Differential Revision: D13487864
fbshipit-source-id: b1eae542aaa6ecb2b74b575a3582934093ccd588
Summary:
Now we get one event for every time an android or iOS device is detected by flipper.
This is different from a successfull connection. E.g. it may not have any flipper-enabled apps running.
Reviewed By: danielbuechele
Differential Revision: D13377316
fbshipit-source-id: 80e42ab0ae1c2ab50d4bec732a0fa86fcd941991
Summary:
Now flipper will include iOS devices in the dropdown, but you'll also get a message saying they aren't yet supported.
Also doesn't start up the PortForwardingMacApp instances in this case, because it's pointless.
Reviewed By: priteshrnandgaonkar
Differential Revision: D13319990
fbshipit-source-id: 75d72c6ed2478c7b999c5f43b764f097141b33de
Summary:
At the moment, when a client is failing to connect, you effectively get an infinite spinner, as it keeps retrying.
This keeps the spinner while it's retrying, but in between, shows a failure icon.
This isn't perfect. It's still shown under possibly the wrong device, but that already happens anyway, this just adds an extra icon.
Pull Request resolved: https://github.com/facebook/flipper/pull/339
Reviewed By: priteshrnandgaonkar
Differential Revision: D13319635
Pulled By: jknoxville
fbshipit-source-id: e16177ecc7058b779fb17b61e20fcbac8ccf0c29
Summary: Adds support for physical iOS devices, when the necessary dependencies are present. Unfortunately these aren't open sourced yet so the open source build won't get this feature yet.
Reviewed By: priteshrnandgaonkar
Differential Revision: D13001473
fbshipit-source-id: d8c2bcd53b7972bec676717c8af0112800b918d0
Summary: When a plugin has no gatekeeper defined, an incorrect warning was logged, saying that if fails the gatekeeper "undeinfed"
Reviewed By: jknoxville
Differential Revision: D13275803
fbshipit-source-id: 9ae5ed55031cc6a636c7c5ffa23bdd059a8ed35f
Summary:
- New improved UI
- Instead of sending the callstack as a string from android, now sending it as an array
- Deeplink to Logs support just for android. In iOS crash is not automatically logged in Logs plugin, atleast thats what happens in sample app
Reviewed By: jknoxville
Differential Revision: D13216477
fbshipit-source-id: d8b77549c83572d0442e431ce88a8f01f42c9565
Summary: Makes a crash reporter plugin as a device plugin
Reviewed By: passy
Differential Revision: D13203954
fbshipit-source-id: 02ef2aff05d5a240eaff588f9b515d3d610fc182
Summary: This diff fixes the improper plugin id getting assigned to the variable which lead to notifications not getting shown. The client id has `#` so pluginId is no longer the second argument when one splits the string by `#`. This diff fixes this problem.
Reviewed By: passy
Differential Revision: D13176776
fbshipit-source-id: cd5bdc33c61485e3cdc2f2dbcc615980c39c8b8c
Summary: Retry up to 5 times with exponential backoff.
Reviewed By: passy
Differential Revision: D13138244
fbshipit-source-id: 94c68b87aa281cfc3239b0bb8bdd75a2e0d7edc7
Summary: This was misusing promise.resolve by calling it before the result is produced, meaning there was a race condition. It would also resolve as success even if listDevices failed.
Reviewed By: passy
Differential Revision: D13121173
fbshipit-source-id: f120a1b199d1e3168059c537461f65a8dc125a94
Summary:
Finally tracked down this bug that's been annoying me.
If you start flipper while the adb daemon is not running, then flipper will start the daemon, but it won't wait for it to have finished starting before telling the client to watch for devices. This is a race condition, and in practice never seems to work.
To avoid this, I'm calling `adb devices` on the client and waiting for it to complete before doing anything else. This forces it to wait for the daemon to start up if it hasn't already, and if it has then it instantly returns.
Reviewed By: passy
Differential Revision: D13101963
fbshipit-source-id: b85bed24751ce5c8efdfc6e841400e4db2580ab0
Summary: Adds test for the plugin reducer and dispatcher
Reviewed By: jknoxville, passy
Differential Revision: D13082652
fbshipit-source-id: 4af2c7721c4d88abbd332d610ff71d5db78e721c