e27b7e996d
A number of changes here. I recommend viewing the diff with the <a href="?w=1">whitespace flag enabled</a>.
- OpenTelemetry is replaced with a custom and lightweight tracing solution.
- Three trace targets are currently supported: console, Zipkin, and NextJS.
- Tracing is now governed by environment variables rather than `--require instrument.js`.
+ `TRACE_TARGET`: one of `CONSOLE`, `ZIPKIN`, or `TELEMETRY`; defaults to `TELEMETRY` if unset or invalid.
+ `TRACE_ID`: an 8-byte hex-encoded value used as the Zipkin trace ID; if not provided, this value will be randomly generated and passed down to subprocesses.
Other sundry:
- I'm missing something, probably a setup step, with the Zipkin target. Traces are captured successfully, but you have to manually enter the Trace ID in order to view the trace - it doesn't show up in queries.
- I'm generally unhappy with [this commit](235cedcb3e
). It is... untidy to provide a telemetry object via `setGlobal`, but I don't have a ready alternative. Is `distDir` strictly required when creating a new Telemetry object? I didn't dig too deep here.
As noted, there are a lot of changes, so it'd be great if a reviewer could:
- [ ] pull down the branch and try to break it
- [ ] check the Zipkin traces and identify possible regressions in the functionality
Closes #22570
Fixes #22574
35 lines
958 B
TypeScript
35 lines
958 B
TypeScript
import loaderUtils from 'next/dist/compiled/loader-utils'
|
|
|
|
export type ClientPagesLoaderOptions = {
|
|
absolutePagePath: string
|
|
page: string
|
|
}
|
|
|
|
// this parameter: https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters
|
|
function nextClientPagesLoader(this: any) {
|
|
const pagesLoaderSpan = this.currentTraceSpan.traceChild(
|
|
'next-client-pages-loader'
|
|
)
|
|
|
|
return pagesLoaderSpan.traceFn(() => {
|
|
const { absolutePagePath, page } = loaderUtils.getOptions(
|
|
this
|
|
) as ClientPagesLoaderOptions
|
|
|
|
pagesLoaderSpan.setAttribute('absolutePagePath', absolutePagePath)
|
|
|
|
const stringifiedAbsolutePagePath = JSON.stringify(absolutePagePath)
|
|
const stringifiedPage = JSON.stringify(page)
|
|
|
|
return `
|
|
(window.__NEXT_P = window.__NEXT_P || []).push([
|
|
${stringifiedPage},
|
|
function () {
|
|
return require(${stringifiedAbsolutePagePath});
|
|
}
|
|
]);
|
|
`
|
|
})
|
|
}
|
|
|
|
export default nextClientPagesLoader
|