diff --git a/packages/preview-service/src/jobProcessor.ts b/packages/preview-service/src/jobProcessor.ts index aff3f517d..e4c170b43 100644 --- a/packages/preview-service/src/jobProcessor.ts +++ b/packages/preview-service/src/jobProcessor.ts @@ -35,28 +35,22 @@ export const jobProcessor = async ({ port, timeout }: JobArgs): Promise => { - const jobId = job.jobId - const jobLogger = logger.child({ jobId, serverUrl: job.url }) const start = new Date() - jobLogger.info('Picked up job {jobId} for {serverUrl}') + logger.info('Picked up job {jobId} for {serverUrl}') + const jobMessage = + 'Processed job {jobId} with result {status}. It took {elapsed} seconds.' let page: Page | undefined = undefined try { page = await browser.newPage() - const result = await pageFunction({ page, job, logger: jobLogger, port, timeout }) + const result = await pageFunction({ page, job, logger, port, timeout }) const elapsed = (new Date().getTime() - start.getTime()) / 1000 - jobLogger.info( - { status: result.status, elapsed }, - 'Processes job {jobId} with result {status}. It took {elapsed} seconds.' - ) + logger.info({ status: result.status, elapsed }, jobMessage) return result } catch (err) { const elapsed = (new Date().getTime() - start.getTime()) / 1000 - jobLogger.error( - { err, elapsed }, - 'Failed to process {jobId} job. It took {elapsed} seconds' - ) + logger.error({ err, elapsed }, jobMessage) const reason = err instanceof Error ? err.stack ?? err.toString() @@ -90,14 +84,10 @@ const pageFunction = async ({ }) await page.goto(`http://127.0.0.1:${port}/index.html`) page.setDefaultTimeout(timeout) - // page.setDefaultTimeout(deps.timeoutMilliseconds) - const previewResult = await Promise.race([ - page.evaluate(async (job: JobPayload) => { - await window.load(job) - return await window.takeScreenshot() - }, job), - timeoutAt(timeout) - ]) + const previewResult = await page.evaluate(async (job: JobPayload) => { + await window.load(job) + return await window.takeScreenshot() + }, job) return { jobId: job.jobId, status: 'success', result: previewResult } } diff --git a/packages/preview-service/src/main.ts b/packages/preview-service/src/main.ts index ed357fbbc..b33a122f3 100644 --- a/packages/preview-service/src/main.ts +++ b/packages/preview-service/src/main.ts @@ -77,31 +77,38 @@ const server = app.listen(port, async () => { // nothing after this line is getting called, this blocks await jobQueue.process(async (payload, done) => { + let jobLogger = logger.child({ payloadId: payload.id }) try { jobDoneCallback = done const browser = await launchBrowser() const parseResult = jobPayload.safeParse(payload.data) if (!parseResult.success) { - logger.error({ parseError: parseResult.error }, 'Invalid job payload') + jobLogger.error( + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + { parseError: parseResult.error, payload: payload.data }, + 'Invalid job payload' + ) return done(parseResult.error) } const job = parseResult.data + jobLogger = jobLogger.child({ jobId: job.jobId, serverUrl: job.url }) + const resultsQueue = new Bull(job.responseQueue, opts) + const result = await jobProcessor({ - logger, + logger: jobLogger, browser, job: parseResult.data, port: PORT, timeout: PREVIEW_TIMEOUT }) - const resultsQueue = new Bull(job.responseQueue, opts) // with removeOnComplete, the job response potentially containing a large images, // is cleared from the response queue await resultsQueue.add(result, { removeOnComplete: true }) await browser.close() done() } catch (err) { - logger.error({ err }, 'Job processing failed') + jobLogger.error({ err }, 'Processing {jobId} failed') if (err instanceof Error) { done(err) } else { diff --git a/packages/server/modules/previews/resultListener.ts b/packages/server/modules/previews/resultListener.ts index b3c5aab18..1d3ca199c 100644 --- a/packages/server/modules/previews/resultListener.ts +++ b/packages/server/modules/previews/resultListener.ts @@ -73,12 +73,18 @@ export const consumePreviewResultFactory = const priority = 0 const previewStatus = 2 const log = logger.child({ - ...previewResult, + jobId: previewResult.jobId, + status: previewResult.status, + durationSeconds: previewResult.result.durationSeconds, projectId: streamId }) + const previewMessage = + 'Consumed preview generation {status} message payload for {jobId}.' + switch (previewResult.status) { case 'error': + log.error(previewMessage) await upsertObjectPreview({ objectPreview: { objectId, @@ -89,13 +95,10 @@ export const consumePreviewResultFactory = previewStatus } }) - - log.error('Preview generation failed for {jobId}.') - // store preview error in the db break case 'success': - log.info('Consumed preview generation {status} message payload for {jobId}.') + log.info(previewMessage) const preview: Record = {} const allImgsArr: Buffer[] = [] let i = 0