From cb69395b43aeaae8a854ef656c4aed254bcad6ce Mon Sep 17 00:00:00 2001 From: OscarDHdz Date: Thu, 8 Sep 2022 16:33:24 -0500 Subject: [PATCH] Scaffolder: Set router scheduler param Signed-off-by: OscarDHdz --- packages/backend/src/plugins/scaffolder.ts | 1 + plugins/scaffolder-backend/api-report.md | 7 +++++-- .../src/service/router.test.ts | 18 ++++++------------ .../scaffolder-backend/src/service/router.ts | 15 ++++++++------- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/packages/backend/src/plugins/scaffolder.ts b/packages/backend/src/plugins/scaffolder.ts index 19da3b3ae0..d079b64c28 100644 --- a/packages/backend/src/plugins/scaffolder.ts +++ b/packages/backend/src/plugins/scaffolder.ts @@ -33,5 +33,6 @@ export default async function createPlugin( catalogClient: catalogClient, reader: env.reader, identity: env.identity, + scheduler: env.scheduler, }); } diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 02a6f0d664..3fb0b2631f 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -23,6 +23,7 @@ import { Logger } from 'winston'; import { Observable } from '@backstage/types'; import { Octokit } from 'octokit'; import { PluginDatabaseManager } from '@backstage/backend-common'; +import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { Schema } from 'jsonschema'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { ScmIntegrations } from '@backstage/integration'; @@ -543,16 +544,18 @@ export interface RouterOptions { // (undocumented) database: PluginDatabaseManager; // (undocumented) - databaseTaskStore?: DatabaseTaskStore; - // (undocumented) identity?: IdentityApi; // (undocumented) logger: Logger; // (undocumented) reader: UrlReader; // (undocumented) + scheduler?: PluginTaskScheduler; + // (undocumented) taskBroker?: TaskBroker; // (undocumented) + taskStore?: DatabaseTaskStore; + // (undocumented) taskWorkers?: number; } diff --git a/plugins/scaffolder-backend/src/service/router.test.ts b/plugins/scaffolder-backend/src/service/router.test.ts index b13e955c15..1df419fbb3 100644 --- a/plugins/scaffolder-backend/src/service/router.test.ts +++ b/plugins/scaffolder-backend/src/service/router.test.ts @@ -27,16 +27,6 @@ import express from 'express'; import request from 'supertest'; import ObservableImpl from 'zen-observable'; -jest.mock('@backstage/backend-tasks', () => ({ - TaskScheduler: { - fromConfig: () => ({ - forPlugin: () => ({ - scheduleTask: jest.fn(), - }), - }), - }, -})); - /** * TODO: The following should import directly from the router file. * Due to a circular dependency between this plugin and the @@ -161,7 +151,7 @@ describe('createRouter', () => { database: createDatabase(), catalogClient, reader: mockUrlReader, - databaseTaskStore, + taskStore: databaseTaskStore, taskBroker, }); app = express().use(router); @@ -570,9 +560,11 @@ describe('createRouter', () => { expect(responseDataFn).toHaveBeenCalledTimes(2); expect(responseDataFn).toHaveBeenCalledWith(`event: log data: {"id":0,"taskId":"a-random-id","type":"log","createdAt":"","body":{"message":"My log message"}} + `); expect(responseDataFn).toHaveBeenCalledWith(`event: completion data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{"message":"Finished!"}} + `); expect(taskBroker.event$).toHaveBeenCalledTimes(1); @@ -759,7 +751,7 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ database: createDatabase(), catalogClient, reader: mockUrlReader, - databaseTaskStore, + taskStore: databaseTaskStore, taskBroker, identity: { getIdentity }, }); @@ -1149,9 +1141,11 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ expect(responseDataFn).toHaveBeenCalledTimes(2); expect(responseDataFn).toHaveBeenCalledWith(`event: log data: {"id":0,"taskId":"a-random-id","type":"log","createdAt":"","body":{"message":"My log message"}} + `); expect(responseDataFn).toHaveBeenCalledWith(`event: completion data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{"message":"Finished!"}} + `); expect(taskBroker.event$).toHaveBeenCalledTimes(1); diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 4abea52027..2a48b0f5d1 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -15,7 +15,7 @@ */ import { PluginDatabaseManager, UrlReader } from '@backstage/backend-common'; -import { TaskScheduler } from '@backstage/backend-tasks'; +import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { CatalogApi } from '@backstage/catalog-client'; import { Entity, @@ -64,11 +64,12 @@ export interface RouterOptions { reader: UrlReader; database: PluginDatabaseManager; catalogClient: CatalogApi; + scheduler?: PluginTaskScheduler; actions?: TemplateAction[]; taskWorkers?: number; taskBroker?: TaskBroker; - databaseTaskStore?: DatabaseTaskStore; + taskStore?: DatabaseTaskStore; additionalTemplateFilters?: Record; identity?: IdentityApi; } @@ -158,6 +159,7 @@ export async function createRouter( catalogClient, actions, taskWorkers, + scheduler, additionalTemplateFilters, } = options; @@ -170,10 +172,10 @@ export async function createRouter( const integrations = ScmIntegrations.fromConfig(config); let databaseTaskStore: DatabaseTaskStore; - if (!options.databaseTaskStore) { + if (!options.taskStore) { databaseTaskStore = await DatabaseTaskStore.create({ database }); } else { - databaseTaskStore = options.databaseTaskStore; + databaseTaskStore = options.taskStore; } let taskBroker: TaskBroker; @@ -211,8 +213,7 @@ export async function createRouter( actionsToRegister.forEach(action => actionRegistry.register(action)); workers.forEach(worker => worker.start()); - if (databaseTaskStore.shutdownTask) { - const scheduler = TaskScheduler.fromConfig(config).forPlugin('scaffolder'); + if (scheduler && databaseTaskStore.listStaleTasks) { await scheduler.scheduleTask({ id: 'close_stale_tasks', frequency: { cron: '*/5 * * * *' }, // every 5 minutes, also supports Duration @@ -223,8 +224,8 @@ export async function createRouter( }); for (const task of tasks) { - logger.info(`Successfully closed stale task ${task.taskId}`); await databaseTaskStore.shutdownTask(task); + logger.info(`Successfully closed stale task ${task.taskId}`); } }, });