Track bootstrap diagnostics

Summary:
^

In addition to logging to the console bootstrap performance metrics, track these events to scuba as well.

Reviewed By: aigoncharov

Differential Revision: D46648876

fbshipit-source-id: 191704c13158884bb8cfbca614a23f2a64f1fd93
This commit is contained in:
Lorenzo Blasa
2023-06-13 02:45:57 -07:00
committed by Facebook GitHub Bot
parent 5f292bcc08
commit 0db4e99aff
3 changed files with 49 additions and 15 deletions

View File

@@ -9,6 +9,7 @@
export {FlipperServerImpl} from './FlipperServerImpl'; export {FlipperServerImpl} from './FlipperServerImpl';
export {loadSettings} from './utils/settings'; export {loadSettings} from './utils/settings';
export * from './utils/tracker';
export {loadLauncherSettings} from './utils/launcherSettings'; export {loadLauncherSettings} from './utils/launcherSettings';
export {loadProcessConfig} from './utils/processConfig'; export {loadProcessConfig} from './utils/processConfig';
export {getEnvironmentInfo} from './utils/environmentInfo'; export {getEnvironmentInfo} from './utils/environmentInfo';

View File

@@ -22,7 +22,20 @@ type AppConnectionCertificateExchangePayload = AppConnectionPayload & {
error?: string; error?: string;
}; };
type ServerBootstrapPerformancePayload = {
loggerInitializedMS: number;
keytarLoadedMS: number;
runningInstanceShutdownMS: number;
httpServerStartedMS: number;
serverCreatedMS: number;
companionEnvironmentInitializedMS: number;
appServerStartedMS: number;
developmentServerAttachedMS: number;
serverStartedMS: number;
};
type TrackerEvents = { type TrackerEvents = {
'server-bootstrap-performance': ServerBootstrapPerformancePayload;
'server-started': {port: number; tcp: boolean}; 'server-started': {port: number; tcp: boolean};
'server-auth-token-verification': { 'server-auth-token-verification': {
successful: boolean; successful: boolean;

View File

@@ -25,6 +25,7 @@ import {
hasAuthToken, hasAuthToken,
startFlipperServer, startFlipperServer,
startServer, startServer,
tracker,
} from 'flipper-server-core'; } from 'flipper-server-core';
import {isTest} from 'flipper-common'; import {isTest} from 'flipper-common';
import exitHook from 'exit-hook'; import exitHook from 'exit-hook';
@@ -155,8 +156,9 @@ async function start() {
const enhanceLogger = await initializeLogger(staticPath); const enhanceLogger = await initializeLogger(staticPath);
const t1 = performance.now(); const t1 = performance.now();
const loggerInitializedMS = t1 - t0;
console.info( console.info(
`[flipper-server][bootstrap] Logger initialised (${t1 - t0} ms)`, `[flipper-server][bootstrap] Logger initialised (${loggerInitializedMS} ms)`,
); );
let keytar: any = undefined; let keytar: any = undefined;
@@ -179,7 +181,10 @@ async function start() {
} }
const t2 = performance.now(); const t2 = performance.now();
console.info(`[flipper-server][bootstrap] Keytar loaded (${t2 - t1} ms)`); const keytarLoadedMS = t2 - t1;
console.info(
`[flipper-server][bootstrap] Keytar loaded (${keytarLoadedMS} ms)`,
);
const isProduction = const isProduction =
process.env.NODE_ENV !== 'development' && process.env.NODE_ENV !== 'test'; process.env.NODE_ENV !== 'development' && process.env.NODE_ENV !== 'test';
@@ -200,10 +205,9 @@ async function start() {
} }
const t3 = performance.now(); const t3 = performance.now();
const runningInstanceShutdownMS = t3 - t2;
console.info( console.info(
`[flipper-server][bootstrap] Check for running instances completed (${ `[flipper-server][bootstrap] Check for running instances completed (${runningInstanceShutdownMS} ms)`,
t3 - t2
} ms)`,
); );
const {app, server, socket, readyForIncomingConnections} = await startServer({ const {app, server, socket, readyForIncomingConnections} = await startServer({
@@ -214,9 +218,10 @@ async function start() {
}); });
const t4 = performance.now(); const t4 = performance.now();
const httpServerStartedMS = t4 - t3;
console.info( console.info(
`[flipper-server][bootstrap] HTTP server started (${t4 - t3} ms)`, `[flipper-server][bootstrap] HTTP server started (${httpServerStartedMS} ms)`,
); );
const flipperServer = await startFlipperServer( const flipperServer = await startFlipperServer(
@@ -230,8 +235,9 @@ async function start() {
); );
const t5 = performance.now(); const t5 = performance.now();
const serverCreatedMS = t5 - t4;
console.info( console.info(
`[flipper-server][bootstrap] FlipperServer created (${t5 - t4} ms)`, `[flipper-server][bootstrap] FlipperServer created (${serverCreatedMS} ms)`,
); );
exitHook(async () => { exitHook(async () => {
@@ -245,11 +251,10 @@ async function start() {
const companionEnv = await initCompanionEnv(flipperServer); const companionEnv = await initCompanionEnv(flipperServer);
const t6 = performance.now(); const t6 = performance.now();
const companionEnvironmentInitializedMS = t6 - t5;
console.info( console.info(
`[flipper-server][bootstrap] Companion environment initialised (${ `[flipper-server][bootstrap] Companion environment initialised (${companionEnvironmentInitializedMS} ms)`,
t6 - t5
} ms)`,
); );
if (argv.failFast) { if (argv.failFast) {
@@ -265,8 +270,9 @@ async function start() {
await flipperServer.connect(); await flipperServer.connect();
const t7 = performance.now(); const t7 = performance.now();
const appServerStartedMS = t7 - t6;
console.info( console.info(
`[flipper-server][bootstrap] Ready for app connections (${t7 - t6} ms)`, `[flipper-server][bootstrap] Ready for app connections (${appServerStartedMS} ms)`,
); );
if (argv.bundler) { if (argv.bundler) {
@@ -274,17 +280,31 @@ async function start() {
} }
const t8 = performance.now(); const t8 = performance.now();
const developmentServerAttachedMS = t8 - t7;
console.info( console.info(
`[flipper-server][bootstrap] Development server attached (${t8 - t7} ms)`, `[flipper-server][bootstrap] Development server attached (${developmentServerAttachedMS} ms)`,
); );
readyForIncomingConnections(flipperServer, companionEnv); readyForIncomingConnections(flipperServer, companionEnv);
const t9 = performance.now(); const t9 = performance.now();
const serverStartedMS = t9 - t8;
console.info( console.info(
`[flipper-server][bootstrap] Listening at port ${chalk.green(argv.port)} (${ `[flipper-server][bootstrap] Listening at port ${chalk.green(
t9 - t8 argv.port,
} ms)`, )} (${serverStartedMS} ms)`,
); );
tracker.track('server-bootstrap-performance', {
loggerInitializedMS,
keytarLoadedMS,
runningInstanceShutdownMS,
httpServerStartedMS,
serverCreatedMS,
companionEnvironmentInitializedMS,
appServerStartedMS,
developmentServerAttachedMS,
serverStartedMS,
});
} }
async function launch() { async function launch() {