From 2db9bccf759cb29c14468afa6d9779b84b6efdcf Mon Sep 17 00:00:00 2001 From: Andrey Goncharov Date: Tue, 25 Oct 2022 05:31:48 -0700 Subject: [PATCH] Export client logs for the active client as a part of the universal export Summary: Design doc: https://docs.google.com/document/d/1HLCFl46RfqG0o1mSt8SWrwf_HMfOCRg_oENioc1rkvQ/edit# Introduce a command rto fetch debug data from the devices Reviewed By: passy Differential Revision: D40470838 fbshipit-source-id: 40a7ec66b1266ceff1b31b5b4f19b93765b78615 --- desktop/flipper-common/src/server-types.tsx | 7 +++++++ .../flipper-server-core/src/FlipperServerImpl.tsx | 4 ++++ .../flipper-ui-core/src/sandy-chrome/LeftRail.tsx | 4 ++-- desktop/flipper-ui-core/src/utils/exportData.tsx | 14 +++++++++++--- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/desktop/flipper-common/src/server-types.tsx b/desktop/flipper-common/src/server-types.tsx index 5c7c5e65a..82ee66d9f 100644 --- a/desktop/flipper-common/src/server-types.tsx +++ b/desktop/flipper-common/src/server-types.tsx @@ -162,6 +162,12 @@ export interface FSStatsLike { birthtimeMs: number; } +export interface DeviceDebugData { + serial: string; + appId: string; + files: {path: string; data: string}[]; +} + export type FlipperServerCommands = { 'get-server-state': () => Promise<{ state: FlipperServerState; @@ -234,6 +240,7 @@ export type FlipperServerCommands = { ) => Promise; 'device-clear-logs': (serial: string) => Promise; 'device-navigate': (serial: string, location: string) => Promise; + 'fetch-debug-data': () => Promise; 'metro-command': (serial: string, command: string) => Promise; 'client-list': () => Promise; 'client-find': (clientId: string) => Promise; diff --git a/desktop/flipper-server-core/src/FlipperServerImpl.tsx b/desktop/flipper-server-core/src/FlipperServerImpl.tsx index 9ecb113e5..b308c307d 100644 --- a/desktop/flipper-server-core/src/FlipperServerImpl.tsx +++ b/desktop/flipper-server-core/src/FlipperServerImpl.tsx @@ -419,6 +419,10 @@ export class FlipperServerImpl implements FlipperServer { 'device-clear-logs': async (serial) => this.getDevice(serial).clearLogs(), 'device-navigate': async (serial, loc) => this.getDevice(serial).navigateToLocation(loc), + 'fetch-debug-data': async () => { + // TODO: Implement fetching client logs from all devices + return []; + }, 'metro-command': async (serial: string, command: string) => { const device = this.getDevice(serial); if (!(device instanceof MetroDevice)) { diff --git a/desktop/flipper-ui-core/src/sandy-chrome/LeftRail.tsx b/desktop/flipper-ui-core/src/sandy-chrome/LeftRail.tsx index b545fa739..1b2af759f 100644 --- a/desktop/flipper-ui-core/src/sandy-chrome/LeftRail.tsx +++ b/desktop/flipper-ui-core/src/sandy-chrome/LeftRail.tsx @@ -63,7 +63,7 @@ import { showOpenDialog, startFileExport, startLinkExport, - startLogsExport, + startFlipperLogsExport, } from '../utils/exportData'; import {openDeeplinkDialog} from '../deeplink'; import {css} from '@emotion/css'; @@ -229,7 +229,7 @@ function ExtrasMenu() { ); const startLogsExportTracked = useTrackedCallback( 'Logs export', - startLogsExport, + startFlipperLogsExport, [], ); const startLinkExportTracked = useTrackedCallback( diff --git a/desktop/flipper-ui-core/src/utils/exportData.tsx b/desktop/flipper-ui-core/src/utils/exportData.tsx index 635ad5399..81aa4cc52 100644 --- a/desktop/flipper-ui-core/src/utils/exportData.tsx +++ b/desktop/flipper-ui-core/src/utils/exportData.tsx @@ -605,13 +605,21 @@ export function canFileExport() { return !!getRenderHostInstance().showSaveDialog; } -export async function startLogsExport() { +export async function startFlipperLogsExport() { const serializedLogs = exportLogs .map((item) => JSON.stringify(item)) .join('\n'); await getRenderHostInstance().exportFile?.(serializedLogs); } +export async function startClientLogsExport() { + const _clientLogs = await getRenderHostInstance().flipperServer.exec( + 'fetch-debug-data', + ); + + // TODO: Save all log files +} + export async function exportEverythingEverywhereAllAtOnce( store: MiddlewareAPI, ) { @@ -619,10 +627,10 @@ export async function exportEverythingEverywhereAllAtOnce( // TODO: Pack all files in a single archive // Step 1: Export Flipper logs - await startLogsExport(); + await startFlipperLogsExport(); // Step 2: Export device logs - // TODO: Implement me + await startClientLogsExport(); // Step 3: Export Flipper State // TODO: Export all plugins automatically