Made shut down stale tasks configurable.
Signed-off-by: Bogdan Nechyporenko <bnechyporenko@bol.com>
This commit is contained in:
committed by
Fredrik Adelöw
parent
739de82471
commit
de7513e7fa
@@ -32,7 +32,7 @@ import {
|
||||
scaffolderTaskBrokerExtensionPoint,
|
||||
scaffolderTemplatingExtensionPoint,
|
||||
} from '@backstage/plugin-scaffolder-node/alpha';
|
||||
import { createBuiltinActions } from './scaffolder';
|
||||
import { createBuiltinActions, DatabaseTaskStore } from './scaffolder';
|
||||
import { createRouter } from './service/router';
|
||||
|
||||
/**
|
||||
@@ -75,6 +75,7 @@ export const scaffolderPlugin = createBackendPlugin({
|
||||
deps: {
|
||||
logger: coreServices.logger,
|
||||
config: coreServices.rootConfig,
|
||||
lifecycle: coreServices.lifecycle,
|
||||
reader: coreServices.urlReader,
|
||||
permissions: coreServices.permissions,
|
||||
database: coreServices.database,
|
||||
@@ -84,6 +85,7 @@ export const scaffolderPlugin = createBackendPlugin({
|
||||
async init({
|
||||
logger,
|
||||
config,
|
||||
lifecycle,
|
||||
reader,
|
||||
database,
|
||||
httpRouter,
|
||||
@@ -104,6 +106,26 @@ export const scaffolderPlugin = createBackendPlugin({
|
||||
}),
|
||||
];
|
||||
|
||||
lifecycle.addShutdownHook(async () => {
|
||||
const databaseTaskStore = await DatabaseTaskStore.create({
|
||||
database,
|
||||
});
|
||||
const { tasks: pendingTasks } = await databaseTaskStore.list({
|
||||
status: 'processing',
|
||||
});
|
||||
|
||||
if (pendingTasks.length > 0) {
|
||||
await Promise.all(
|
||||
pendingTasks.map(task =>
|
||||
databaseTaskStore.shutdownTask({ taskId: task.id }),
|
||||
),
|
||||
);
|
||||
logger.info(
|
||||
`Successfully shut ${pendingTasks.length} processing tasks down.`,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
const actionIds = actions.map(action => action.id).join(', ');
|
||||
log.info(
|
||||
`Starting scaffolder with the following actions enabled ${actionIds}`,
|
||||
|
||||
@@ -23,10 +23,6 @@ import { ConflictError, NotFoundError } from '@backstage/errors';
|
||||
import { Knex } from 'knex';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
import {
|
||||
SerializedTaskEvent,
|
||||
SerializedTask,
|
||||
TaskStatus,
|
||||
TaskEventType,
|
||||
TaskStore,
|
||||
TaskStoreEmitOptions,
|
||||
TaskStoreListEventsOptions,
|
||||
@@ -34,6 +30,12 @@ import {
|
||||
TaskStoreCreateTaskResult,
|
||||
TaskStoreShutDownTaskOptions,
|
||||
} from './types';
|
||||
import {
|
||||
SerializedTaskEvent,
|
||||
SerializedTask,
|
||||
TaskStatus,
|
||||
TaskEventType,
|
||||
} from '@backstage/plugin-scaffolder-node';
|
||||
import { DateTime } from 'luxon';
|
||||
|
||||
const migrationsDir = resolvePackagePath(
|
||||
@@ -147,6 +149,7 @@ export class DatabaseTaskStore implements TaskStore {
|
||||
|
||||
async list(options: {
|
||||
createdBy?: string;
|
||||
status?: TaskStatus;
|
||||
}): Promise<{ tasks: SerializedTask[] }> {
|
||||
const queryBuilder = this.db<RawDbTaskRow>('tasks');
|
||||
|
||||
@@ -156,6 +159,12 @@ export class DatabaseTaskStore implements TaskStore {
|
||||
});
|
||||
}
|
||||
|
||||
if (options.status) {
|
||||
queryBuilder.where({
|
||||
status: options.status,
|
||||
});
|
||||
}
|
||||
|
||||
const results = await queryBuilder.orderBy('created_at', 'desc').select();
|
||||
|
||||
const tasks = results.map(result => ({
|
||||
|
||||
Reference in New Issue
Block a user