diff --git a/desktop/flipper-server-core/src/utils/runHealthchecks.tsx b/desktop/flipper-server-core/src/utils/runHealthchecks.tsx index 945fe9c69..8005e516f 100644 --- a/desktop/flipper-server-core/src/utils/runHealthchecks.tsx +++ b/desktop/flipper-server-core/src/utils/runHealthchecks.tsx @@ -42,6 +42,8 @@ export async function getHealthChecks( }); } +let envInfoPromise: Promise | undefined; + export async function runHealthcheck( options: FlipperDoctor.HealthcheckSettings, categoryName: keyof FlipperDoctor.Healthchecks, @@ -60,7 +62,10 @@ export async function runHealthcheck( throw new Error('Unknown healthcheck: ' + ruleName); } - const environmentInfo = await getEnvInfo(); + if (!envInfoPromise) { + envInfoPromise = getEnvInfo(); + } + const environmentInfo = await envInfoPromise; const checkResult = await check.run!(environmentInfo, options.settings); return checkResult.hasProblem && check.isRequired ? { diff --git a/desktop/flipper-ui-browser/src/flipperServerConnection.tsx b/desktop/flipper-ui-browser/src/flipperServerConnection.tsx index 0185c7ffc..3d57ae928 100644 --- a/desktop/flipper-ui-browser/src/flipperServerConnection.tsx +++ b/desktop/flipper-ui-browser/src/flipperServerConnection.tsx @@ -12,7 +12,7 @@ import {FlipperServer} from 'flipper-common'; import {io, Socket} from 'socket.io-client'; const CONNECTION_TIMEOUT = 30 * 1000; -const EXEC_TIMOUT = 30 * 10 * 1000; +const EXEC_TIMOUT = 30 * 1000; export function createFlipperServer(): Promise { // TODO: polish this all! @@ -54,6 +54,10 @@ export function createFlipperServer(): Promise { window?.flipperShowError?.('WebSocket connection lost'); console.warn('Socket to Flipper server disconnected'); connected = false; + pendingRequests.forEach((r) => + r.reject(new Error('FLIPPER_SERVER_SOCKET_CONNECT_LOST')), + ); + pendingRequests.clear(); }); socket.on('exec-response', (id: number, data: any) => { diff --git a/desktop/flipper-ui-core/src/dispatcher/flipperServer.tsx b/desktop/flipper-ui-core/src/dispatcher/flipperServer.tsx index f6ecfe0e1..dcd7369c8 100644 --- a/desktop/flipper-ui-core/src/dispatcher/flipperServer.tsx +++ b/desktop/flipper-ui-core/src/dispatcher/flipperServer.tsx @@ -59,7 +59,7 @@ export function connectFlipperServerToStore( {'' + err} ) : ( - <>Failed to start Flipper server: ${err.message} + <>Failed to start Flipper server: {err.message ?? err} ), duration: null, }); diff --git a/desktop/flipper-ui-core/src/utils/runHealthchecks.tsx b/desktop/flipper-ui-core/src/utils/runHealthchecks.tsx index 34b3f9420..c5aa483f2 100644 --- a/desktop/flipper-ui-core/src/utils/runHealthchecks.tsx +++ b/desktop/flipper-ui-core/src/utils/runHealthchecks.tsx @@ -50,12 +50,21 @@ async function launchHealthchecks(options: HealthcheckOptions): Promise { continue; } for (const h of category.healthchecks) { - const checkResult = await flipperServer.exec( - 'doctor-run-healthcheck', - {settings: options.settings}, - categoryKey as keyof FlipperDoctor.Healthchecks, - h.key, - ); + const checkResult: FlipperDoctor.HealthcheckResult = await flipperServer + .exec( + 'doctor-run-healthcheck', + {settings: options.settings}, + categoryKey as keyof FlipperDoctor.Healthchecks, + h.key, + ) + .catch((e) => { + console.error('Failed to run doctor check', e); + return { + status: 'FAILED', + isAcknowledged: false, + message: 'Failed to run doctor check: ' + e, + }; + }); const metricName = `doctor:${h.key.replace('.', ':')}.healthcheck`; // e.g. "doctor:ios:xcode-select.healthcheck" if (checkResult.status !== 'SUCCESS') { hasProblems = true;