Commit Graph

186 Commits

Author SHA1 Message Date
Pritesh Nandgaonkar
b1fd70a3c3 Show status message with percentage for the seriailization
Reviewed By: passy

Differential Revision: D16382096

fbshipit-source-id: 17c44a7befcef82815dc9d2379898e23a36a05c8
2019-07-30 06:50:23 -07:00
Pritesh Nandgaonkar
e7198040ea Add UI to select plugins
Summary: Adds UI to the select the plugin to export. It lists the plugins which has currently some data in the redux store and it also lists those plugins which has implemented `exportPersistedState` function, as it might happen that the redux store may not have the data for a plugin but it will still export the data by calling `exportPersistedState`, which will ping the mobile client to get the data at point while we export the flipper trace.

Reviewed By: jknoxville

Differential Revision: D16468408

fbshipit-source-id: 452a7caf7199dd2b8df330bbb10d0a90008e92ec
2019-07-26 10:53:27 -07:00
Sara Valderrama
594565de31 Fix icons url redundancy for variant argument
Summary: Update Flipper icon request URL (variant argument was appended twice in certain cases).

Reviewed By: jknoxville

Differential Revision: D16443282

fbshipit-source-id: e64e03e40030baa1a7e6067cfc2a9aaf7a75302a
2019-07-25 13:26:06 -07:00
John Knox
d0a61d6455 Back out "[flipper] Add 1h tolerance to ssl certs"
Summary:
Original commit changeset: bdbd61bce1bc

That change appears to be causing some issues for open source users: https://github.com/facebook/flipper/issues/498

To mitigate the issue I'm reverting it, the change turns out to be unnecessary anyway.

Reviewed By: passy

Differential Revision: D16486136

fbshipit-source-id: 70decca6e017a6a2903cc484641fb2e736dc5d7c
2019-07-25 04:11:59 -07:00
Pritesh Nandgaonkar
958a335043 Fix the broken metrics feature
Summary:
The metrics feature got broken in this D16280167, due to a review change.

```
+  if (!selectedPlugins.includes(pluginName)) {

-  if (selectedPlugins.length > 0 && !selectedPlugins.includes(pluginName)) {
```

Reviewed By: jknoxville

Differential Revision: D16379959

fbshipit-source-id: ab1c4caf56a55bd97f1299822d6fa4331815c569
2019-07-22 12:54:33 -07:00
Pritesh Nandgaonkar
23d4327f69 Convert multiple arguments as options for the helper functions
Summary: With the each addition of the CLI arguments, there were addition in the arguments to the helper functions for exportStore. To control it, I have moved those arguments into an object

Reviewed By: jknoxville

Differential Revision: D16378511

fbshipit-source-id: e620bc0d4863aa6029a57771aa970aebb7294ba9
2019-07-22 12:54:33 -07:00
Pritesh Nandgaonkar
e8a8f87086 Adds capability to select plugins for which the data would be exported
Summary: This diff adds `selectedPlugins` property in the redux store. With this diff now you can pass the list of plugins to headless so that it exports only the selected plugin's data

Reviewed By: passy

Differential Revision: D16280167

fbshipit-source-id: b03a1c49a7f51547470e0bcfa43083e52efabdd0
2019-07-19 07:02:39 -07:00
Pascal Hartig
d81a037962 Convert some CommonJS constructs to ES6
Summary:
Tried to automate this with [cjs-to-es6](https://github.com/nolanlawson/cjs-to-es6) but it only
works on vanilla JS files without any special Flow syntax. I converted some places
manually but we can just do the rest as we modify the files.

Reviewed By: jknoxville

Differential Revision: D16340187

fbshipit-source-id: b55c7ce2d719876e47e85f5f3fce13b8c8ae4010
2019-07-18 12:56:08 -07:00
Pascal Hartig
453b04a008 Remove duplicate import
Summary: Drive-by change. There's a renamed import already in there which is clearer.

Reviewed By: bnelo12

Differential Revision: D16332879

fbshipit-source-id: ac8e829a3533df2991a7f8e5eab073020d6df411
2019-07-18 10:38:28 -07:00
John Knox
b4585ef72c Add types to reduxDevToolsConfig
Summary: Getting rid of a flowfixme, part of T47375728

Reviewed By: passy

Differential Revision: D16336917

fbshipit-source-id: 163734796b72ba2c8971f27ce213baf7ca3f23a1
2019-07-18 06:30:02 -07:00
John Knox
934bfa97e4 Fix type in test
Summary: fail isn't a thing

Reviewed By: passy

Differential Revision: D16335797

fbshipit-source-id: c2f07b722424f540e6eb1a4cd423397ec1fe545c
2019-07-17 07:19:22 -07:00
John Knox
939513e7a6 Add dateformat flow stub
Summary: `flow-typed create-stub dateformat`

Reviewed By: passy

Differential Revision: D16334489

fbshipit-source-id: d72b89a6578913bb799f93038455e16e386a7422
2019-07-17 07:19:22 -07:00
John Knox
7d3f05dae3 Re-enable flow module checking
Summary:
Setting the module extension to .tsx overrode the defaults, meaning .js files were no longer being checked when imported.

This adds the defaults back to the extensions to be checked, including `.js`
It does seem to cause errors importing `.tsx` at the moment, but there aren't many so I've just $FlowFixMe'd them for now.

https://flow.org/en/docs/config/options/#toc-module-file-ext-string

Reviewed By: passy

Differential Revision: D16333800

fbshipit-source-id: 7bea92c038048234b4f634704f71c15d79ab3c63
2019-07-17 06:40:09 -07:00
Benjamin Elo
ce93ecfcca Speed up Redux dev tools by disabling log serialization
Summary: Serializing the logs of the devices within Redux dev tools was causing Electron to crash due to it being out of memory. We can sanitize the state serialization by rewriting the device logs to <<DEVICE_LOGS>>. This fixes the issue and causes Electron to use less memory and CPU while in devlopment mode.

Reviewed By: jknoxville

Differential Revision: D16282673

fbshipit-source-id: abee6d167b23f24647e45f039a77ab60576ab3e6
2019-07-17 02:50:13 -07:00
John Knox
9a97b3b45b Add 1h tolerance to ssl certs
Summary:
This changes the start date of all generated certificates to be 1h in the past.

Why? To allow for clock skew, and allow clock manipulation in tests.

To do this, I had to switch from `openssl x509 req`, to `openssl ca` for generating them, because it has the startdate parameter.

This variant is a bit more complicated to use, so I've added an openssl.conf and some extra files.

I also changed the org from Sonar to Flipper because it now needs to match the CSRs coming from the mobile apps, and they use Flipper.

Reviewed By: passy

Differential Revision: D16223722

fbshipit-source-id: bdbd61bce1bc1b54d7b0b3cc6741675aa68d2cf6
2019-07-15 04:33:52 -07:00
Pritesh Nandgaonkar
ba95e73a8d Show status updates while exporting
Summary: Adds a feature to display status update, while exporting Flipper trace. This will make user aware of the steps which are being executed to export flipper trace. This diff also logs the status update, to better support the issue posted by the user regarding the Flipper trace.

Reviewed By: jknoxville

Differential Revision: D16203810

fbshipit-source-id: 8f0bdc3836fec6dd79f2ca9827822d13f6cfd8bd
2019-07-15 04:01:45 -07:00
Pritesh Nandgaonkar
7f2709e1a5 Add close button to the export share sheet
Summary: Adds close button to the dialog box which appears while exporting a flipper trace. To implement this I had to first see what is the bottle neck of the export process. The major bottle neck turned out to be the serialization step. So to make the export process interruptible, I have put in a call `await idler.idle()` which resolves when the main thread is idle. I have also added the tests for the idler.

Reviewed By: passy

Differential Revision: D16183582

fbshipit-source-id: 4ec0c985e216fd9d41e91cdcd8b4cca66d2cb04d
2019-07-15 04:01:44 -07:00
John Knox
385d9ded57 Don't create adb client during module import
Summary:
Creation of the adb client requires the logger to already be initialized, so this should never be called at the global scope in a module, or you'll get weird import-order related bugs.

I noticed this while debugging, I don't think it's impacting anything right now, but have made it lazy just to avoid confusion in future.

Reviewed By: passy

Differential Revision: D16162266

fbshipit-source-id: 5363292d5cfcf2867a2654777cd8f4baed01d2c0
2019-07-10 03:28:25 -07:00
Pascal Hartig
c588b650ae Prefer const wherever possible
Summary:
Non-final identifiers make code harder to understand.
This is particularly true for JavaScript where even the *type*
can change as a value gets reassigned later.

This enforces to use `const` whereever possible, but doesn't
"outlaw" `let`. Mixed destructuring is also still allowed.

Used `eslint --fix` to change all existing cases.

Reviewed By: jknoxville

Differential Revision: D16131329

fbshipit-source-id: 2eceaca7c603b71b36e005be5d135e1849f2518d
2019-07-10 03:28:25 -07:00
Pritesh Nandgaonkar
004efcb7a8 Fasten up serialization
Summary:
The serialization algo was slow. The problem was that it used to just go to the first child which was not serializable and went back to the parent which then looked for first child from the remaining children and serialized it, and this happened at all levels. Instead, currently, the child fills the stack up with the children which needs to be serialized, so there is no back and forth for each child. This improved the speed a lot.

Test case: Serializing ~10000 rows of logs
Previous Iterative algo: 33215.3 ms
Iterative Algo with the above change: 2051.1 ms
Recursive Algo: ~1000 ms

New Algo Video:

{F164050963}

Prev Algo: Too Slow

{F164051027}

{F164051085}

Recursive Speed:

{F164051982}

Reviewed By: jknoxville

Differential Revision: D16037998

fbshipit-source-id: 70fae9a0073ff28d1a6528ec0dbddceb213b2c5f
2019-07-02 08:12:28 -07:00
Pritesh Nandgaonkar
43495fa64c Do no fetch meta data for the archived device
Summary: Do not fetch meta data when the selected device is the archived one,

Reviewed By: jknoxville

Differential Revision: D16011742

fbshipit-source-id: cd84ef62094ffd8f90922d304ebd911f3b36f469
2019-06-27 06:58:07 -07:00
John Knox
34f835ace8 More exit handling fixes
Summary:
Line 166 is missing a process.exit() causing the process to stay open forever if anything goes wrong.

Making everything use errorAndExit, and making use of the utility function so we don't need to remember when to print e, and when to print e.message.

Reviewed By: passy

Differential Revision: D15989164

fbshipit-source-id: c683fa07d98fe49283a59b5f8108ef54babc97a3
2019-06-26 09:17:56 -07:00
Pritesh Nandgaonkar
cad26c9319 Refactor headless start function
Summary: Refactors the headless to have a list of closures instead of the `if` conditions. This will make addition of new arguments easy as it will be just adding a new closure to the list. One can change the order of the execution of the closures by inserting it at whatever index the user wants.

Reviewed By: passy

Differential Revision: D15965142

fbshipit-source-id: e9f348fe9d9011adcd47d140713d6187eab3b3d3
2019-06-25 04:59:44 -07:00
Pascal Hartig
58c66a626d Track time for exports
Summary:
This sometimes take *A LONG* time for me, so I want to
know if I'm an outlier or not.

Reviewed By: jknoxville

Differential Revision: D15939147

fbshipit-source-id: 9ebd3914efdd537eeadd49e522397acc97a6ff9c
2019-06-21 06:32:59 -07:00
Pritesh Nandgaonkar
e5294d34f0 Plugin name list
Summary:
Adds an argument to the headless Flipper to print the list of available plugins. Added `--list-plugins`.

Currently the startFlipper function is not scalable enough to add new arguments and its implementation. I am planning to tackle this with the list of Actions which will be closure. So adding a new argument with its implementation will be just appending a closure at the correct location in an array. Will work on that in the later diff stacked on the current one.

Reviewed By: jknoxville

Differential Revision: D15789778

fbshipit-source-id: 91ba472617d593c3490bb932590a06d83597cba7
2019-06-17 06:18:45 -07:00
John Knox
3fcd9c8e51 More specific idb failure logging
Summary: The "Conflict in temp dir" message was misleading when there were 0, rather than >1 file. This fixes that error message.

Reviewed By: passy

Differential Revision: D15716247

fbshipit-source-id: 572addf99f623cdcffd7602dd3935bb69a50d047
2019-06-10 04:13:19 -07:00
Pritesh Nandgaonkar
95fae7d4e8 Call exportState function before exporting metrics
Summary:
This diff fetches the additional data by calling the hook added in each plugins when the headless tries to export metrics directly out of the store rather than from the trace.

I added `fetchMetadata` function which will be called while exporting the state as well as exporting the metrics. We do not need to fetch metadata in the case when the metrics are exported from the given trace.

Reviewed By: passy

Differential Revision: D15560129

fbshipit-source-id: 9b14340e565ce17d1825bc2d32520d7b0c2b2219
2019-06-03 15:06:30 -07:00
Pascal Hartig
f81d46410b Add missing Server import
Summary: Not sure why Flow was okay with this before.

Reviewed By: danielbuechele

Differential Revision: D15601506

fbshipit-source-id: a211bb373061d1481dbc6748d4e061a980cd0278
2019-06-03 06:07:52 -07:00
John Knox
13e942f59a Add getStringFromErrorLike utility
Summary: I've found myself having to extract strings from things that *might* be Errors more than once. Centralising this so it's consistent and correct everywhere.

Reviewed By: danielbuechele

Differential Revision: D15536034

fbshipit-source-id: 8e054dd6122aff10f0aacdfaed65125df0aea99f
2019-05-30 04:02:39 -07:00
Pritesh Nandgaonkar
c94c2c8455 Add list-devices option to list the available devices.
Summary: This diff adds an option of `--list-devices` which will list the currently active devices on the machine. It will be later used to select a device by passing an `id` as an argument.

Reviewed By: danielbuechele

Differential Revision: D15524250

fbshipit-source-id: 7a79ceb1e431a25adcb4e05bc0cb68407c527806
2019-05-29 09:54:38 -07:00
John Knox
e1aa6c4cd8 Distinguish between failures and things that we knowingly dont support
Summary:
A lot of the failures in the dashboard are due to unsupported android devices.

We can track this individually, but it shouldn't be affecting how reliable we think things are.

This adds an Error type, that when thrown, adds an extra field to log messages to specify that it's a known incompatibility.

Reviewed By: passy

Differential Revision: D15394863

fbshipit-source-id: 9d7948fbb8c94bd7a64434496e10392532a61eed
2019-05-28 04:22:09 -07:00
John Knox
a64a2a31e5 Fix plugin success rate logging
Summary:
I noticed that during a refactor, plugin success-rate failures started getting reported as successes.
Thankfully it's only the plugin metrics that are affected.

Reviewed By: passy

Differential Revision: D15394864

fbshipit-source-id: d9f44a0dd61f68dcdcbf2eb524821a3eb023231b
2019-05-28 04:22:08 -07:00
John Knox
79a4c3a163 Explicit no devices found error
Summary: Distinguish between the cases when there's something wrong with listing devices and we don't see any, and when we do see some but none of them match what we're expecting.

Reviewed By: passy

Differential Revision: D15394042

fbshipit-source-id: 02728671d46531aec37da4bcafb85393269bf9cb
2019-05-28 04:22:08 -07:00
Pritesh Nandgaonkar
914cbf6ccd Request all metadata for Images plugin before export
Summary:
Fresco plugin on the desktop side used to ask for all the image list along with the metadata when it was mounted. The mobile side never sent the image list and other information if not requested from it. That means, although Fresco plugin is a background plugin, there weren't any messages sent from the mobile side. Thus there was no trace available for Images plugin when the trace was exported. This diff, adds a hook which gets called before the export, where we request all the metadata from the mobile SDK.

BUG:

{F159305887}

Reviewed By: passy

Differential Revision: D15407962

fbshipit-source-id: 0012de2ab29d0f62e92d00f4926b04b1e394b62a
2019-05-23 05:48:04 -07:00
Pritesh Nandgaonkar
2c024a4488 Call exportPersistedState only for clients of a selected device
Summary:
Call `exportPersistedState` only for the clients of selectedDevice. This will fasten up our export, we do not need to call `exportPersistedState` for the clients of nonSelectedDevice.

{F159322777}

Reviewed By: passy

Differential Revision: D15440652

fbshipit-source-id: e018603cfeb56fec462b54a6897fb254cc361390
2019-05-22 03:47:27 -07:00
Daniel Büchele
7f99a5cfe2 remove crash
Summary: fixing flipper crash on launch

Reviewed By: priteshrnandgaonkar

Differential Revision: D15412629

fbshipit-source-id: e74ee0a60ac10999438da5a888732e42a0ffccc8
2019-05-20 04:47:11 -07:00
John Knox
7823389081 Enforce android command escaping with flow
Summary: Splits the utility into a public and private part - just for the opaque types to work. The private part validates arguments and does the command running. Both are safe to use, but the non-internal one is easier, you don't have to validate anything.

Reviewed By: passy

Differential Revision: D15393477

fbshipit-source-id: 92f63180fb94af4337fdf8c7dace5bc5a85d5a54
2019-05-17 09:53:37 -07:00
John Knox
d238a958ec Extract execute and push to androidUtil
Summary: This commit doesn't change anything, just moves the android command running stuff into its own utility.

Reviewed By: passy

Differential Revision: D15393476

fbshipit-source-id: de93bbd88fa62bddff8d9ea56cfbc33bfd854d53
2019-05-17 09:53:36 -07:00
John Knox
841d5d57a2 Enable desktop crash reporting
Summary: Sends native crash reports for production internal builds.

Reviewed By: passy

Differential Revision: D15391757

fbshipit-source-id: a4149c2a264eb5ef38fb6f1cc43d52361ac83748
2019-05-17 06:45:05 -07:00
Pritesh Nandgaonkar
89ebb11520 Accept Trace file and export a metric
Summary: This diff adds support to pass a path to the trace file to the headless Flipper. The headless Flipper then exports the metrics out of it.

Reviewed By: passy

Differential Revision: D15337067

fbshipit-source-id: 61aca1ffd58e879dafe6aa176f058f7b11460952
2019-05-17 03:13:48 -07:00
Pritesh Nandgaonkar
4dcb41f5e6 Iterative version of the serializer
Summary: Iterative version of the custom serializer. The recursive implementation led to call stack overflow for news feed surface in fb4a.

Reviewed By: danielbuechele

Differential Revision: D15251643

fbshipit-source-id: b8af921b1a4d85c52d4d45a7abf95a5bb5f283f7
2019-05-09 06:36:36 -07:00
Pritesh Nandgaonkar
38f3132b66 Fix the export metrics format
Summary: Fix the format of the export. Due to unknown reason the changes done in the D14933499 was [reverted back](https://our.intern.facebook.com/intern/diff/D14933499/?src_number=80619316) on the same diff. Thus this diff fixes the format of the metrics export

Reviewed By: passy

Differential Revision: D15239653

fbshipit-source-id: b9416f89e1b0022000d6201eb08ca1f456d5ed2e
2019-05-07 08:30:49 -07:00
John Knox
bc993596ca Include error messages in success-rate metrics
Summary:
At the moment, we can see the %-success of instrumented operations, but it's hard to attribute the ones that fail to actual errors.
This will allow us to see for every session-event row, the error messages that caused each of the failures.

Then if necessary, you can search for that error message in logview to get more info like the stack trace.

Requires a corresponding change in puma, since this is changing a number to a json value.

Reviewed By: danielbuechele

Differential Revision: D15099185

fbshipit-source-id: b966e6e55ab82f1cb9a4cfd7bf02034a1df01929
2019-04-29 08:46:29 -07:00
Pritesh Nandgaonkar
afd729deb6 Added metrics argument to headless inorder to export metrics
Summary:
This diff makes headless flipper accept `metrics` argument. Once this is passed. The headless flipper will terminate to export the metrics of the plugins, the type of the export looks like the following.

```
export type MetricType = {[metricName: string]: number};
type MetricPluginType = {[pluginID: string]: MetricType};
export type ExportMetricType = {[clientID: string]: MetricPluginType};

```

This diff, uses the store to export the metrics. I will modify the logic to accept the data which gets exported through `exportData`

Reviewed By: passy

Differential Revision: D14933499

fbshipit-source-id: dade5b7bc59ea4beb6d16c5ef471737e8597358a
2019-04-25 07:41:34 -07:00
John Knox
460260d620 Fix samsung "run-as" warning (#413)
Summary:
During client setup, if no device is found with a matching CSR, and any of those devices errored while trying to find that out, surface that error, instead of a generic 'No matching device found'.

This means that the warning about some unusable samsung devices now shows again, instead of a generic message.

Pull Request resolved: https://github.com/facebook/flipper/pull/413

Reviewed By: passy

Differential Revision: D14891185

Pulled By: jknoxville

fbshipit-source-id: 8f4cb4e8e04defb429a4ca915b0dab4725495c87
2019-04-11 05:29:52 -07:00
Pritesh Nandgaonkar
25f82986ea Avoid triggering notification in headless
Summary:
There was a bug where headless version used to crash when crash reporter plugin used to get messages. So the problem was that it tried to trigger the notification in headless version, which obviously won't work.

Solves this [bug](https://our.intern.facebook.com/intern/sandcastle/log/?instance_id=88210824&step_id=773963185&step_index=5&name=Get+headless+and+run+it)
Bug:

{F155634920}

Reviewed By: jknoxville, danielbuechele

Differential Revision: D14874122

fbshipit-source-id: 2614b16665a354be7a75844a372dbea7a59d7e55
2019-04-11 04:08:59 -07:00
Pascal Hartig
ad4c2092a5 Replace launcher error bar with titlebar indicator
Summary:
When starting Flipper with `--launcher-msg`, it currently shows a red error bar at the bottom. That's not ideal for various reasons including it looking kinda bad and it only supporting a single error (the last one set).

This instead adds an action that shows an indicator next to the version at the top as we had it before with the previous system.

Reviewed By: danielbuechele

Differential Revision: D14778859

fbshipit-source-id: 28591de6262e090a4e59a7f5a8cd86d7b3abf8fe
2019-04-05 06:47:14 -07:00
Pascal Hartig
684ecd8a39 Don't retrieve info object twice
Summary: Some unnecessary syscalls in the way we actually use this at the moment.

Reviewed By: danielbuechele

Differential Revision: D14750875

fbshipit-source-id: 5959ed0845398b29698ab58f7359869fa3657fdc
2019-04-04 09:54:23 -07:00
Pritesh Nandgaonkar
830c8067e4 Timeout promise while exporting flipper plugin
Summary:
Added a promiseTimeout util so that we limit the time taken to export flipper plugin. I had received a feedback from the user stating that that the loader for the export stays for ages and never finishes. So this diff adds a timeout to the promise which is returned by `exportPersistedState` function. This function is currently implemented just by Layout inspector to fetch the entire view hierarchy. I suspect the the former mentioned bug may be due to the unresponsive client.

This diff also shows the plugin and the client information for which `exportPersistedState` timed out. Also this will hopefully solve the problem surfaced recently stating that the bug report gets stuck, the reason for which I suspect would be the same as the above mentioned reason, because we export flipper data when we create a bug report.

Reviewed By: danielbuechele

Differential Revision: D14712633

fbshipit-source-id: 35f8cfa722ec3b7ff94ebda943d618834ac3207d
2019-04-04 04:20:15 -07:00
Pascal Hartig
b20d0a4c8b Add headless option to dump on disconnect
Summary:
This adds an optional exit strategy that reacts to the client disconnecting rather than a `SIGINT` which can be used for integration tests.

`MiddlewareAPI` is a subset of `Store` and required to work here.

Annoyingly, it's not quite clear to me why this does not work as part of an event loop cycle and requires a `setTimeout`. This doesn't have any negative effects and works in the same way that the SIGINT interruption works, but it's a bit of an eyesore.

Reviewed By: danielbuechele

Differential Revision: D14622111

fbshipit-source-id: e2caca056e478428d977565dc9bc09eefca4230c
2019-03-28 06:53:57 -07:00