Scaffolder: Set router scheduler param

Signed-off-by: OscarDHdz <v-ohernandez@expediagroup.com>
This commit is contained in:
OscarDHdz
2022-09-08 16:33:24 -05:00
parent 038ff2714a
commit cb69395b43
4 changed files with 20 additions and 21 deletions
@@ -33,5 +33,6 @@ export default async function createPlugin(
catalogClient: catalogClient,
reader: env.reader,
identity: env.identity,
scheduler: env.scheduler,
});
}
+5 -2
View File
@@ -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;
}
@@ -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);
@@ -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<any>[];
taskWorkers?: number;
taskBroker?: TaskBroker;
databaseTaskStore?: DatabaseTaskStore;
taskStore?: DatabaseTaskStore;
additionalTemplateFilters?: Record<string, TemplateFilter>;
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}`);
}
},
});