Summary:
Adds an optional "plugin" field to the tracked metrics. The idea is to be able to see failures in plugins.
Added it around all desktop -> sdk "call"s, so it won't require any effort from developers but we'll get lots of immediate data. E.g. How often layout -> getNodes fails. I think we can go modify the existing pipeline to take both platform and plugin data so we can get session roll-ups too.
Corresponding change to the puma app: D13882629, adds a plugin field to all tables so we can filter by plugin, or null for platform failures.
I'm thinking it will be worthwhile to expose some method to plugin developers, that lets them explicitly track failures. It would be better if it encapsulated their plugin id etc, so they just need to say what failed. But that can be done any time, I don't have any particular use cases in mind yet.
Reviewed By: passy
Differential Revision: D13878379
fbshipit-source-id: 2e2ef6b98f763e6edcfe937741d6988dae4b92d1
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:
Umm, this is embarrassing. I thouhgt I did this when I put
up the first diff? Apparently I didn't. Well, I just ran
this for `0.14.2` and now it actually does what it
says on the tin.
Reviewed By: danielbuechele
Differential Revision: D13861574
fbshipit-source-id: dd7ae30a97e6da036d3a30b43de941e82088062c
Summary: If one logListener was to throw an error, the others wouldn't receive the logs anymore.
Reviewed By: jknoxville
Differential Revision: D13881128
fbshipit-source-id: a653ba9279380c25bbc7ae2fd0c63de0884aa441
Summary: This diff updates the check which triggers crash notifications. We got a user feedback that crash reporter used to report non fatal crash too and it used to annoy users with bombardment of crash notifications.
Reviewed By: passy
Differential Revision: D13878272
fbshipit-source-id: 75446f08f806e8f28a6f68953c0a001fd18a7dc0
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:
Incorrect imports were causing an error: `invariant is not a function`.
This fixes the imports.
Reviewed By: jknoxville, priteshrnandgaonkar
Differential Revision: D13859945
fbshipit-source-id: 2a5f5f87b4df2840c8e6b749acb293b145805afa
Summary:
Added instructions on using custom ports.
We probably want to put the headless instructions here too when they're ready.
Reviewed By: danielbuechele
Differential Revision: D13860469
fbshipit-source-id: 76537a36e6fc85e805a29830927e4d59ee4f73e8
Summary: Adds tests for flipper import and export. Also fixed few edge cases which was discovered through tests. The edge case was that it didn't export device plugin states.
Reviewed By: danielbuechele
Differential Revision: D13828357
fbshipit-source-id: ddc4352b729ca7f05c5875f2f3fbdd2c7f4e2186
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:
This adds the concept of a custom role description to Flipper's accessibility inspector. This functionality was added in support library version 24.1, and supported in Litho as of D8066609.
This will show both the AccessibilityNodeInfo's raw roleDescription under the AccessibilityNodeInfo section, as well as the derived role description under the main Accessibility section (see highlighted elements in screenshot below).
The difference between the raw role description and the derived role description is that the derived description will show any default description a role is given, such as "Button" for button roles. This makes it clear that the role-description property will override those default strings.
Unfortunately making these mutable requires the AccessibilityRoleUtil class be restructured a bit to support EnumMapping for its roles, which isn't very straightforward due to these default descriptions being stored in the AccessibilityRole enum, so that will have to wait for a future diff.
Screenshot:
{F149099209}
Reviewed By: danielbuechele
Differential Revision: D13759563
fbshipit-source-id: 6eeb22a35f529663725630936af9967ea1f19c0c
Summary:
I must have run this locally on an outdated version of eslint or the
plugin, because I did not see all the formatting errors. This is because
`eslint-plugin-prettier` dropped support for the `fb` preset (see https://github.com/prettier/eslint-plugin-prettier/pull/113/files). This restores the equivalent ruleset explicitly.
Pull Request resolved: https://github.com/facebook/flipper/pull/363
Reviewed By: danielbuechele
Differential Revision: D13839021
Pulled By: passy
fbshipit-source-id: 59e27a241e8aada8648b175ab8abbdfbd391556e
Summary:
This moves the version display from the updater component
to the titlebar itself, so it'll be shown even in dev mode.
This is already useful when using it on platforms like Linux
where the updater isn't supported, but will also help when
moving to the launcher model.
Reviewed By: jknoxville
Differential Revision: D13819139
fbshipit-source-id: cbc127b8ccdf932f823bc1f40319f296516dfc31
Summary:
Wanted to do that for a while, but the previous eslint error
blocked me. Continues running with the same level or warnings.
Reviewed By: jknoxville
Differential Revision: D13818478
fbshipit-source-id: ac12888dd4177316020c947925d4ff9d64784140
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:
* Adds `build-headless.js` to bundle the app using metro
* the build script replaces the prelude code added by metro with our own to make it work in node. Metro will add an API to add custom prelude code in the next version.
* Pins down metro's dependency of `temp` to `v0.9.0` (instead of `0.8.3`) to be compatible with node 10. (This will be fixed in a metro upgrade)
Reviewed By: passy
Differential Revision: D13786574
fbshipit-source-id: bddb3542c370c068d90a90c4b59337f995e4fa3f
Summary:
Adding `headless/index.js` This is the entry point to the headless version of Flipper.
This creates a redux store, and initializes the dispatchers. As all business logic (adb connections, etc.) are managed by dispatchers, this spins up a working version of Flipper, listening on our ports, allowing connections to devices.
For APIs not available in node.js, we are adding polyfills. `WebSocket` is used by redux-devtools, `fetch` is used in a couple of places throughout the application. These polyfills are added to the global namespace, so the app can run the same as in the browser.
Reviewed By: passy
Differential Revision: D13786573
fbshipit-source-id: 685f67e1c0d2948de7c43b8a1e2dc10dc69aa743
Summary: Moving a couple of build function from `build-release` to `build-utils` so they can be shared between the desktop build process and the headless build process.
Reviewed By: passy
Differential Revision: D13786575
fbshipit-source-id: df0a0da6d9a643e3e1c65470e1e96254e8966dd9
Summary:
`static/index.js` is called by Electron's main process, it does the setup required to run Flipper. However, some of this setup is electron specific, other is not. This moves all non-Electron specific code into `setup.js` which later can be called from node, too. All Electron specific stuff is still in `static/index.js`.
On a side note, this remove the renaming from `.sonar` to `.flipper` config folder, as I think most users should have been migrated by now, users that are not yet migrated will lose their settings, which isn't too much of an issue as our settings are very minimal anyways.
Reviewed By: passy
Differential Revision: D13638253
fbshipit-source-id: 22ab2a65ffec87b40bd86899630d582d9dc5d05c
Summary:
Before this diff, the crash reporteer plugin for android just used to show messages which were error and had tag as "AndroidRuntime". This diff fixes this and instead accepts multiple different tags which might be related to crashes.
The issue with triggering the notification for all kind of messages would be that, the user might get many. For the jni errors, the stack trace of it are shown as multiple entry instead of one entry in logcat. So to combine all the stack trace into one callstack message, this diff adds a timer of 10ms and combines the messages which occur in that timespan and then trigger the notification.
Reviewed By: danielbuechele
Differential Revision: D13772505
fbshipit-source-id: fec6f5a7f9f46948c9f9dc5b2a7b92690913c8aa
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:
Apparently this seems to be the only way to make build work, with the updated licenses. It also follows the same strategy as Travis.
I am using double pipe in `sdkmanager` command execution, to avoid breaking the build, because `sdkmanager` returns exit code 141 in case it meets the requirements requested. (e.g.: `yes | sdkmanager --licenses` returns 141, which in turn breaks the build due to `set -eo pipefail` Bash flags, that CircleCI is using in order to execute any scripts)
For the record, I tried the following solutions, that did not work:
* Add accepted license SHA in Android SDK licenses folder.
* Accept all licenses prior to running the other jobs (with a separate job, working as a dependency to the rest of the Workflow jobs) (`yes | sdkmanager --licenses`)
* Accept all licenses prior to executing any Gradle command (without a separate job) (`yes | sdkmanager --licenses`)
Pull Request resolved: https://github.com/facebook/flipper/pull/362
Differential Revision: D13817430
Pulled By: passy
fbshipit-source-id: d8c95fc5b9202306dd50ea103b6e90142e73ef61
Summary: This adds some frankly disgusting magic to the bump script to determine the next viable snapshot version and creates a second commit.
Reviewed By: jknoxville
Differential Revision: D13801765
fbshipit-source-id: 40728afe9dfde3da7a4fced645a89ed293109878
Summary:
Part 2 of changing flipper to use customizable ports: iOS SDK.
Still to go: JS app.
env var should be of the format:
`FLIPPER_PORTS=1111,2222` for insecure port: 1111 and secure port: 2222.
Reviewed By: danielbuechele
Differential Revision: D13800988
fbshipit-source-id: 3560ba850389964f4b784551b803c45c6524e6f0
Summary: Due to a change in the roadmap the plugin has been renamed to Sections
Reviewed By: danielbuechele
Differential Revision: D13505447
fbshipit-source-id: ff171c5b69ef8186744298a32c7c6b9de49daf2a
Summary:
A new test uses a non-public dependency causing the travis CI to fail.
Use the standard roboelectric one instead.
Reviewed By: passy
Differential Revision: D13801098
fbshipit-source-id: 9fcda26fceaed22d18bd743f10bf39eaae0da7a6
Summary:
Compiled statically for darwin and Linux (x86_64). Also
changed some flags to make this reproducible.
Reviewed By: danielbuechele
Differential Revision: D13801305
fbshipit-source-id: d98701afca3c4787922d377bc6b674b59421f5b8
Summary: Makes building a bit easier and I can have my own README in there.
Reviewed By: jknoxville
Differential Revision: D13784725
fbshipit-source-id: b694c1ce812d4e383ad44faeacd8e0094a96b432
Summary:
Add Podfile documentation so that projects that use `use_frameworks!` have a way to import Flipper into their project
Pull Request resolved: https://github.com/facebook/flipper/pull/347
Reviewed By: passy
Differential Revision: D13761700
Pulled By: priteshrnandgaonkar
fbshipit-source-id: 36d8a5d590b96203ac30fd5d0ca32cae4f194024
Summary:
Part 1 of enabling flipper to run on custom ports: android SDK.
Still to go: iOS SDK and desktop
This should allow you to run mobile apps that use flipper on different ports than the default (8089,8088).
`adb shell`
`su`
`setprop flipper.ports 1111,2222`
From what I can tell, this only works on rooted devices.
Reviewed By: passy
Differential Revision: D13753238
fbshipit-source-id: c5f370c9d8c7382e8c17fb81d4010c642ef7c114
Summary:
After the LogManager interface change this file wasn't updated.
The test isn't enabled at the moment, but I don't know why flow didn't notice this.
Reviewed By: passy
Differential Revision: D13783861
fbshipit-source-id: 09d887f6567300aa9a16ec2a97b17a2d9de338d1
Summary:
Currently, when bumping the version, the script will override "-SNAPSHOT" mentions in both the docs and the properties. This requires some manual fixup after every release. With this change, you can pass "-s" or "--snapshot" to change the version number to a snapshot release and it will only affect the places where that change is necessary.
Did some overall cleanup, too, like getting rid of the macro magic to determine the current location which messes with tooling.
This does *not* include the updated binaries yet. I'll put them up as a separate diff.
Reviewed By: priteshrnandgaonkar
Differential Revision: D13782177
fbshipit-source-id: 87ad0ab20a5f544ddb6aa3e2d30949bbabbabfc4
Summary:
It turns out puma was erroring on the GK field inside the log json, because of improperly escaped " in the fields.
To simplify it I'm changing it to use simple comma separated key:value pairs, since they are always plain string and boolean values.
"gatekeepers":"TEST_PASSING_GK:false,TEST_FAILING_GK:false,devtools_sonar_team:false"
Reviewed By: passy
Differential Revision: D13782283
fbshipit-source-id: 3f331dc9189b1a57f69a2af0d4393baf45e1fa55
Summary:
We had a promise for initializing the servers, but it wasn't rejected when server startup failed.
Fixed by resolving / rejecting based on the listen / error events fired from the server.
Reviewed By: passy
Differential Revision: D13762580
fbshipit-source-id: a0d1a56473f84dc416e5ce2de91a53b21574f452
Summary: Android and iOS each have a separate metric
Reviewed By: passy
Differential Revision: D13763758
fbshipit-source-id: f679360ec0ee008b434bfe12107ac6548d882a1f
Summary: I made that release so it better be good.
Reviewed By: jknoxville
Differential Revision: D13761454
fbshipit-source-id: 28cc1e113e91c3cb96b493a67b21afa77ea61a27
Summary:
Android SDK license SHA has been updated as of January 16, 2019 so it needs to be re-accepted. This is only needed for CircleCI since in Travis setup `sdkmanager` is used in order to accept the Licenses.
Pull Request resolved: https://github.com/facebook/flipper/pull/359
Differential Revision: D13751841
Pulled By: passy
fbshipit-source-id: f3d84277f06bedf06b7a766429d9f7e3275bb516
Summary:
This helps Kotlin nullity inference and *should* already be enforced
by Infer/Eradicate. More details here: https://medium.com/square-corner-blog/non-null-is-the-default-58ffc0bb9111
Reviewed By: jknoxville
Differential Revision: D13732788
fbshipit-source-id: c0c60f0f8e9dc8bffe3780c7a1a700d682a6d2b8