From 3ac27117c64cc720334e50a8b15eb4b8467cfe90 Mon Sep 17 00:00:00 2001 From: mknichel <7355009+mknichel@users.noreply.github.com> Date: Thu, 16 Nov 2023 13:36:00 -0800 Subject: [PATCH] [.next/trace] Record start-dev-server trace span (#58469) This PR makes sure that the `start-dev-server` trace span is recorded to the `.next/trace` file and uploaded to the telemetry endpoint when opted in. Before this PR, the `start-dev-server` span was recorded in `next-dev` in the CLI. However, this would never be written to the `.next/trace` file since it happens in a different process (not the child process for next server). After this PR, the trace span happens in the next-server child process and will be recorded in the `.next/trace` file along with the other events produced by the dev server. --- packages/next/src/cli/next-dev.ts | 5 +---- packages/next/src/server/lib/start-server.ts | 5 ++++- packages/next/src/trace/trace-uploader.ts | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/next/src/cli/next-dev.ts b/packages/next/src/cli/next-dev.ts index bdae5f6248..78831fdfae 100644 --- a/packages/next/src/cli/next-dev.ts +++ b/packages/next/src/cli/next-dev.ts @@ -27,7 +27,6 @@ import { createSelfSignedCertificate } from '../lib/mkcert' import type { SelfSignedCertificate } from '../lib/mkcert' import uploadTrace from '../trace/upload-trace' import { initialEnv } from '@next/env' -import { trace } from '../trace' import { fork } from 'child_process' import { getReservedPortExplanation, @@ -318,9 +317,7 @@ const nextDev: CliCommand = async (args) => { } } - await trace('start-dev-server').traceAsyncFn(async (_) => { - await runDevServer(false) - }) + await runDevServer(false) } function cleanup() { diff --git a/packages/next/src/server/lib/start-server.ts b/packages/next/src/server/lib/start-server.ts index 9e6057d14c..288705e0c9 100644 --- a/packages/next/src/server/lib/start-server.ts +++ b/packages/next/src/server/lib/start-server.ts @@ -22,6 +22,7 @@ import { initialize } from './router-server' import { CONFIG_FILES } from '../../shared/lib/constants' import { getStartServerInfo, logStartInfo } from './app-info-log' import { validateTurboNextConfig } from '../../lib/turbopack-warning' +import { trace } from '../../trace' import { isPostpone } from './router-utils/is-postpone' const debug = setupDebug('next:start-server') @@ -361,7 +362,9 @@ export async function startServer( if (process.env.NEXT_PRIVATE_WORKER && process.send) { process.addListener('message', async (msg: any) => { if (msg && typeof msg && msg.nextWorkerOptions && process.send) { - await startServer(msg.nextWorkerOptions) + await trace('start-dev-server').traceAsyncFn(() => + startServer(msg.nextWorkerOptions) + ) process.send({ nextServerReady: true }) } }) diff --git a/packages/next/src/trace/trace-uploader.ts b/packages/next/src/trace/trace-uploader.ts index 04158097b1..2ddf470c34 100644 --- a/packages/next/src/trace/trace-uploader.ts +++ b/packages/next/src/trace/trace-uploader.ts @@ -18,6 +18,7 @@ const EVENT_FILTER = new Set([ 'webpack-invalid-client', 'webpack-invalidated-server', 'navigation-to-hydration', + 'start-dev-server', ]) const {