From fef53431df1c3745bfb210eb6b8cf8a637b75213 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Mon, 25 Jan 2021 14:02:51 +0100 Subject: [PATCH] create logger and stream that emit events --- .../src/scaffolder/tasks/TaskWorker.ts | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts index 641a8cd9b1..d500fc8e5c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts @@ -14,9 +14,11 @@ * limitations under the License. */ -import { TaskBroker, Task } from './types'; +import { PassThrough } from 'stream'; import { Logger } from 'winston'; +import * as winston from 'winston'; import Docker from 'dockerode'; +import { TaskBroker, Task } from './types'; import { CatalogEntityClient } from '../../lib/catalog'; import { FilePreparer, @@ -59,6 +61,24 @@ export class TaskWorker { logger, } = this.options; + const taskLogger = winston.createLogger({ + level: process.env.LOG_LEVEL || 'info', + format: winston.format.combine( + winston.format.colorize(), + winston.format.timestamp(), + winston.format.simple(), + ), + defaultMeta: {}, + }); + + const stream = new PassThrough(); + stream.on('data', data => { + const message = data.toString().trim(); + if (message?.length > 1) task.emitLog(message); + }); + + taskLogger.add(new winston.transports.Stream({ stream })); + try { task.emitLog('Task claimed, waiting ...'); // Give us some time to curl observe @@ -76,7 +96,7 @@ export class TaskWorker { const publisher = publishers.get(values.storePath); const skeletonDir = await preparer.prepare(task.spec.template, { - logger, + logger: taskLogger, workingDirectory: workingDirectory, }); @@ -84,7 +104,7 @@ export class TaskWorker { const { resultDir } = await templater.run({ directory: skeletonDir, dockerClient, - logStream: process.stdout, // yay + logStream: stream, values: values, }); @@ -100,8 +120,6 @@ export class TaskWorker { // }); // task.emitLog(`Result: ${JSON.stringify(result)}`); - task.emitLog(`Completely done now!`); - await task.complete('completed'); } catch (error) { await task.complete('failed');