| | import statsd from '@/observability/lib/statsd' |
| | import { loadUnversionedTree, loadSiteTree, loadPages, loadPageMap } from './page-data' |
| | import loadRedirects from '@/redirects/lib/precompile' |
| | import { createLogger } from '@/observability/logger' |
| |
|
| | const logger = createLogger(import.meta.url) |
| |
|
| | type WarmServerResult = { |
| | pages: Awaited<ReturnType<typeof loadPageMap>> |
| | redirects: Awaited<ReturnType<typeof loadRedirects>> |
| | unversionedTree: Awaited<ReturnType<typeof loadUnversionedTree>> |
| | siteTree: Awaited<ReturnType<typeof loadSiteTree>> |
| | pageList: Awaited<ReturnType<typeof loadPages>> |
| | pageMap: Awaited<ReturnType<typeof loadPageMap>> |
| | } |
| |
|
| | |
| | |
| | const dog = { |
| | loadUnversionedTree: statsd.asyncTimer(loadUnversionedTree, 'load_unversioned_tree'), |
| | loadSiteTree: statsd.asyncTimer(loadSiteTree, 'load_site_tree'), |
| | loadPages: statsd.asyncTimer(loadPages, 'load_pages'), |
| | loadPageMap: statsd.asyncTimer(loadPageMap, 'load_page_map'), |
| | loadRedirects: statsd.asyncTimer(loadRedirects, 'load_redirects'), |
| | warmServer: statsd.asyncTimer(warmServer, 'warm_server'), |
| | } |
| |
|
| | |
| | let promisedWarmServer: Promise<WarmServerResult> | undefined |
| |
|
| | async function warmServer(languagesOnly: string[] = []): Promise<WarmServerResult> { |
| | const startTime = Date.now() |
| |
|
| | logger.debug( |
| | `Priming context information...${languagesOnly && languagesOnly.length ? ` ${languagesOnly.join(',')} only` : ''}`, |
| | ) |
| |
|
| | const unversionedTree = await dog.loadUnversionedTree(languagesOnly) |
| | const siteTree = await dog.loadSiteTree(unversionedTree, languagesOnly) |
| | const pageList = await dog.loadPages(unversionedTree, languagesOnly) |
| | const pageMap = await dog.loadPageMap(pageList) |
| | const redirects = await dog.loadRedirects(pageList) |
| |
|
| | statsd.gauge('memory_heap_used', process.memoryUsage().heapUsed, ['event:warm-server']) |
| |
|
| | logger.debug(`Context primed in ${Date.now() - startTime} ms`) |
| |
|
| | return { |
| | pages: pageMap, |
| | redirects, |
| | unversionedTree, |
| | siteTree, |
| | pageList, |
| | pageMap, |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| |
|
| | |
| | |
| | export default async function warmServerWrapper(languagesOnly: string[] = []) { |
| | |
| | |
| | |
| | if (!promisedWarmServer) { |
| | promisedWarmServer = dog.warmServer(languagesOnly) |
| | } |
| | return promisedWarmServer |
| | } |
| |
|