From d54bd7c3baa944ef39b158bd9fdb6e2163414a29 Mon Sep 17 00:00:00 2001 From: Andrey Goncharov Date: Thu, 9 Nov 2023 08:25:28 -0800 Subject: [PATCH] Refactor browser connection performance tracking Reviewed By: lblasa Differential Revision: D51158256 fbshipit-source-id: 17e020dd3c26ac73bf2cf0ceb4c664638c6778e9 --- desktop/flipper-common/src/server-types.tsx | 1 + .../src/server/attachSocketServer.tsx | 15 +---------- desktop/flipper-server-core/src/tracker.tsx | 1 + desktop/flipper-server/src/index.tsx | 26 +++++++++++++++++-- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/desktop/flipper-common/src/server-types.tsx b/desktop/flipper-common/src/server-types.tsx index fafae066b..d5962caa1 100644 --- a/desktop/flipper-common/src/server-types.tsx +++ b/desktop/flipper-common/src/server-types.tsx @@ -168,6 +168,7 @@ export type FlipperServerEvents = { 'plugins-server-add-on-message': ExecuteMessage; 'download-file-update': DownloadFileUpdate; 'server-log': LoggerInfo; + 'browser-connection-created': {}; }; export type OS = diff --git a/desktop/flipper-server-core/src/server/attachSocketServer.tsx b/desktop/flipper-server-core/src/server/attachSocketServer.tsx index dd389522d..b397bbf37 100644 --- a/desktop/flipper-server-core/src/server/attachSocketServer.tsx +++ b/desktop/flipper-server-core/src/server/attachSocketServer.tsx @@ -27,7 +27,6 @@ import { } from 'flipper-server-companion'; import {URLSearchParams} from 'url'; import {tracker} from '../tracker'; -import {performance} from 'perf_hooks'; import {getFlipperServerConfig} from '../FlipperServerConfig'; const safe = (f: () => void) => { @@ -53,14 +52,6 @@ export function attachSocketServer( server: FlipperServerImpl, companionEnv: FlipperServerCompanionEnv, ) { - const t0 = performance.now(); - const browserConnectionTimeout = setTimeout(() => { - tracker.track('browser-connection-created', { - successful: false, - timeMS: performance.now() - t0, - }); - }, 20000); - socket.on('connection', (client, req) => { const clientAddress = (req.socket.remoteAddress && @@ -74,11 +65,7 @@ export function attachSocketServer( clearTimeout(disconnectTimeout); } - clearTimeout(browserConnectionTimeout); - tracker.track('browser-connection-created', { - successful: true, - timeMS: performance.now() - t0, - }); + server.emit('browser-connection-created', {}); let connected = true; diff --git a/desktop/flipper-server-core/src/tracker.tsx b/desktop/flipper-server-core/src/tracker.tsx index 03dc25d3a..e9a8f3e97 100644 --- a/desktop/flipper-server-core/src/tracker.tsx +++ b/desktop/flipper-server-core/src/tracker.tsx @@ -54,6 +54,7 @@ type TrackerEvents = { 'browser-connection-created': { successful: boolean; timeMS: number; + timedOut: boolean; }; 'app-connection-created': AppConnectionPayload; 'app-connection-secure-attempt': AppConnectionPayload; diff --git a/desktop/flipper-server/src/index.tsx b/desktop/flipper-server/src/index.tsx index ba4ccbc10..95403e0e2 100644 --- a/desktop/flipper-server/src/index.tsx +++ b/desktop/flipper-server/src/index.tsx @@ -95,9 +95,25 @@ const rootPath = argv.bundler : path.resolve(__dirname, '..'); // In pre-packaged versions of the server, static is copied inside the package. const staticPath = path.join(rootPath, 'static'); -async function start() { - const t0 = performance.now(); +const t0 = performance.now(); +const browserConnectionTimeout = setTimeout(() => { + tracker.track('browser-connection-created', { + successful: false, + timeMS: performance.now() - t0, + timedOut: true, + }); +}, 10000); +const reportBrowserConnection = (successful: boolean) => { + clearTimeout(browserConnectionTimeout); + tracker.track('browser-connection-created', { + successful, + timeMS: performance.now() - t0, + timedOut: false, + }); +}; + +async function start() { const isProduction = process.env.NODE_ENV !== 'development' && process.env.NODE_ENV !== 'test'; const environmentInfo = await getEnvironmentInfo( @@ -206,6 +222,10 @@ async function start() { environmentInfo, ); + flipperServer.once('browser-connection-created', () => { + reportBrowserConnection(true); + }); + const t5 = performance.now(); const serverCreatedMS = t5 - t4; console.info( @@ -311,6 +331,7 @@ process.on('uncaughtException', (error) => { '[flipper-server] uncaught exception, process will exit.', error, ); + reportBrowserConnection(false); process.exit(1); }); @@ -325,5 +346,6 @@ process.on('unhandledRejection', (reason, promise) => { start().catch((e) => { console.error(chalk.red('Server startup error: '), e); + reportBrowserConnection(false); process.exit(1); });