diff --git a/src/pipeline-tasks/models/pipeline-task-log-message.module.ts b/src/pipeline-tasks/models/pipeline-task-log-message.module.ts index 43ea009..3d66018 100644 --- a/src/pipeline-tasks/models/pipeline-task-log-message.module.ts +++ b/src/pipeline-tasks/models/pipeline-task-log-message.module.ts @@ -6,16 +6,19 @@ import { Field, HideField, ObjectType } from '@nestjs/graphql'; export class PipelineTaskLogMessage { @HideField() task: PipelineTask; - @Field(() => PipelineUnits) - unit: PipelineUnits; + @Field(() => PipelineUnits, { nullable: true }) + unit?: PipelineUnits; + @Field() time: Date; + @Field() message: string; - static create(task: PipelineTask, message: string) { + static create(task: PipelineTask, unit: PipelineUnits, message: string) { return Object.assign(new PipelineTaskLogMessage(), { task, message, time: new Date(), + unit, }); } } diff --git a/src/pipeline-tasks/pipeline-task.consumer.ts b/src/pipeline-tasks/pipeline-task.consumer.ts index 7efea9a..48df00c 100644 --- a/src/pipeline-tasks/pipeline-task.consumer.ts +++ b/src/pipeline-tasks/pipeline-task.consumer.ts @@ -57,7 +57,12 @@ export class PipelineTaskConsumer { } for (const script of unit.scripts) { unitLog.logs += `[RUN SCRIPT] ${script}`; - const messages = await this.runScript(script, workspaceRoot, task); + const messages = await this.runScript( + script, + workspaceRoot, + task, + unit.type, + ); unitLog.logs += messages.join(''); } unitLog.status = TaskStatuses.success; @@ -83,6 +88,7 @@ export class PipelineTaskConsumer { script: string, workspaceRoot: string, task?: PipelineTask, + unit?: PipelineUnits, ): Promise { return new Promise((resolve, reject) => { const errorMessages: string[] = []; @@ -95,12 +101,16 @@ export class PipelineTaskConsumer { const str = data.toString(); errorMessages.push(str); logs.push(str); - this.logsService.recordLog(PipelineTaskLogMessage.create(task, str)); + this.logsService.recordLog( + PipelineTaskLogMessage.create(task, unit, str), + ); }); sub.stdout.on('data', (data: Buffer) => { const str = data.toString(); logs.push(str); - this.logsService.recordLog(PipelineTaskLogMessage.create(task, str)); + this.logsService.recordLog( + PipelineTaskLogMessage.create(task, unit, str), + ); }); sub.addListener('close', (code) => { if (code === 0) { diff --git a/src/pipeline-tasks/pipeline-tasks.resolver.ts b/src/pipeline-tasks/pipeline-tasks.resolver.ts index ca405e5..b3e3d77 100644 --- a/src/pipeline-tasks/pipeline-tasks.resolver.ts +++ b/src/pipeline-tasks/pipeline-tasks.resolver.ts @@ -1,4 +1,4 @@ -import { Resolver, Args, Mutation, Subscription } from '@nestjs/graphql'; +import { Resolver, Args, Mutation, Subscription, Query } from '@nestjs/graphql'; import { PipelineTask } from './pipeline-task.entity'; import { PipelineTasksService } from './pipeline-tasks.service'; import { CreatePipelineTaskInput } from './dtos/create-pipeline-task.input'; @@ -18,10 +18,24 @@ export class PipelineTasksResolver { return await this.service.addTask(taskDto); } - @Subscription(() => PipelineTaskLogMessage) + @Subscription(() => PipelineTaskLogMessage, { + resolve: (value) => { + return value; + }, + }) async pipelineTaskLog(@Args() args: PipelineTaskLogArgs) { const task = await this.service.findTaskById(args.taskId); const asyncIterator = this.logsService.watchLogs(task); return asyncIterator; } + + @Query(() => [PipelineTask]) + async listPipelineTaskByPipelineId(@Args('pipelineId') pipelineId: string) { + return await this.service.listTasksByPipelineId(pipelineId); + } + + @Query(() => PipelineTask) + async findPipelineTask(@Args('id') id: string) { + return await this.service.findTaskById(id); + } } diff --git a/src/pipeline-tasks/pipeline-tasks.service.ts b/src/pipeline-tasks/pipeline-tasks.service.ts index 83305f7..8258aad 100644 --- a/src/pipeline-tasks/pipeline-tasks.service.ts +++ b/src/pipeline-tasks/pipeline-tasks.service.ts @@ -40,6 +40,10 @@ export class PipelineTasksService { return await this.repository.findOneOrFail({ id }); } + async listTasksByPipelineId(pipelineId: string) { + return await this.repository.find({ pipelineId }); + } + async doNextTask(pipeline: Pipeline) { const [lckKey, tasksKey] = this.getRedisTokens(pipeline); const redis = this.redis.getClient();