diff --git a/packages/api-elasticsearch-tasks/__tests__/mocks/store.ts b/packages/api-elasticsearch-tasks/__tests__/mocks/store.ts index fd0a9ee3fa8..860790ed613 100644 --- a/packages/api-elasticsearch-tasks/__tests__/mocks/store.ts +++ b/packages/api-elasticsearch-tasks/__tests__/mocks/store.ts @@ -13,5 +13,9 @@ export const createTaskManagerStoreMock = (params?: Params) => { const context = params?.context || createContextMock(); const task = params?.task || createTaskMock(); const log = params?.log || createTaskLogMock(task); - return new TaskManagerStore(context, task, log); + return new TaskManagerStore({ + context, + task, + log + }); }; diff --git a/packages/tasks/__tests__/live/store.ts b/packages/tasks/__tests__/live/store.ts index 47c2933f89e..68ebe53ac2e 100644 --- a/packages/tasks/__tests__/live/store.ts +++ b/packages/tasks/__tests__/live/store.ts @@ -15,7 +15,11 @@ export const createLiveStore = async ( ) => { const context = params.context || (await createLiveContext(params)); - const store = new TaskManagerStore(context, params.task, params.taskLog); + const store = new TaskManagerStore({ + context, + task: params.task, + log: params.taskLog + }); return { store, diff --git a/packages/tasks/src/runner/TaskControl.ts b/packages/tasks/src/runner/TaskControl.ts index d7036b2be04..094b80d2229 100644 --- a/packages/tasks/src/runner/TaskControl.ts +++ b/packages/tasks/src/runner/TaskControl.ts @@ -45,12 +45,28 @@ export class TaskControl implements ITaskControl { }); } /** - * As this as a run of the task, we need to create a new log entry. + * Let's get the task definition. */ + const definition = this.context.tasks.getDefinition(task.definitionId); + if (!definition) { + return this.response.error({ + error: { + message: `Task "${task.id}" cannot be executed because there is no "${task.definitionId}" definition plugin.`, + code: "TASK_DEFINITION_ERROR", + data: { + definitionId: task.definitionId + } + } + }); + } + const disableDatabaseLogs = !!definition.disableDatabaseLogs; + /** + * As this as a run of the task, we need to create a new log entry. + */ let taskLog: ITaskLog; try { - taskLog = await this.getTaskLog(task); + taskLog = await this.getTaskLog(task, disableDatabaseLogs); } catch (error) { return this.response.error({ error @@ -85,8 +101,14 @@ export class TaskControl implements ITaskControl { } }); } + const taskResponse = new TaskResponse(this.response); - const store = new TaskManagerStore(this.context, task, taskLog); + const store = new TaskManagerStore({ + context: this.context, + task, + log: taskLog, + disableDatabaseLogs + }); const manager = new TaskManager( this.runner, @@ -98,19 +120,6 @@ export class TaskControl implements ITaskControl { const databaseResponse = new DatabaseResponse(this.response, store); - const definition = this.context.tasks.getDefinition(task.definitionId); - if (!definition) { - return await databaseResponse.error({ - error: { - message: `Task "${task.id}" cannot be executed because there is no "${task.definitionId}" definition plugin.`, - code: "TASK_DEFINITION_ERROR", - data: { - definitionId: task.definitionId - } - } - }); - } - try { const result = await manager.run(definition); @@ -189,7 +198,21 @@ export class TaskControl implements ITaskControl { }); } - private async getTaskLog(task: ITask): Promise { + private async getTaskLog(task: ITask, disableDatabaseLogs: boolean): Promise { + /** + * If logs are disabled, let's return a mocked one. + */ + if (disableDatabaseLogs) { + return { + id: `${task.id}-log`, + createdOn: task.createdOn, + createdBy: task.createdBy, + executionName: task.executionName, + task: task.id, + iteration: task.iterations, + items: [] + }; + } let taskLog: ITaskLog | null = null; /** * First we are trying to get existing latest log. diff --git a/packages/tasks/src/runner/TaskManagerStore.ts b/packages/tasks/src/runner/TaskManagerStore.ts index 809578b945d..80e0a196f68 100644 --- a/packages/tasks/src/runner/TaskManagerStore.ts +++ b/packages/tasks/src/runner/TaskManagerStore.ts @@ -43,6 +43,13 @@ export interface TaskManagerStoreContext { tasks: Pick; } +export interface ITaskManagerStoreParams { + context: TaskManagerStoreContext; + task: ITask; + log: ITaskLog; + disableDatabaseLogs?: boolean; +} + export class TaskManagerStore< T extends ITaskDataInput = ITaskDataInput, O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput @@ -51,14 +58,16 @@ export class TaskManagerStore< private readonly context: TaskManagerStoreContext; private task: ITask; private taskLog: ITaskLog; + private readonly disableDatabaseLogs: boolean; private readonly taskUpdater = new ObjectUpdater>(); private readonly taskLogUpdater = new ObjectUpdater(); - public constructor(context: TaskManagerStoreContext, task: ITask, log: ITaskLog) { - this.context = context; - this.task = task as ITask; - this.taskLog = log; + public constructor(params: ITaskManagerStoreParams) { + this.context = params.context; + this.task = params.task as ITask; + this.taskLog = params.log; + this.disableDatabaseLogs = !!params.disableDatabaseLogs; } public getStatus(): TaskDataStatus { @@ -139,6 +148,9 @@ export class TaskManagerStore< log: ITaskManagerStoreInfoLog, options?: ITaskManagerStoreAddLogOptions ): Promise { + if (this.disableDatabaseLogs) { + return; + } this.taskLogUpdater.update({ items: [ { @@ -163,6 +175,9 @@ export class TaskManagerStore< log: ITaskManagerStoreErrorLog, options?: ITaskManagerStoreAddLogOptions ): Promise { + if (this.disableDatabaseLogs) { + return; + } /** * Let's log the error to the console as well. */ @@ -196,6 +211,9 @@ export class TaskManagerStore< this.taskUpdater.fetch() ); } + if (this.disableDatabaseLogs) { + return; + } if (this.taskLogUpdater.isDirty()) { this.taskLog = await this.context.tasks.updateLog( this.taskLog.id, diff --git a/packages/tasks/src/types.ts b/packages/tasks/src/types.ts index f74c8a5d415..ada089ca584 100644 --- a/packages/tasks/src/types.ts +++ b/packages/tasks/src/types.ts @@ -393,6 +393,10 @@ export interface ITaskDefinition< * Maximum number a step function can call the Lambda. */ maxIterations: number; + /** + * Disable storing logs in database for this task. + */ + disableDatabaseLogs?: boolean; /** * Task run method. */