From bbcc1041cf796fcaed80fef83510f70d94ee0a4f Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 10 Jan 2023 13:35:34 +0100 Subject: [PATCH] backend-plugin-api: update lifecycle service to use a logger instead of labels Signed-off-by: Patrik Oldsberg --- .changeset/beige-rats-cheer.md | 2 +- .../services/implementations/lifecycleService.ts | 6 ++++-- .../rootHttpRouter/rootHttpRouterFactory.ts | 2 +- .../implementations/rootLifecycleService.test.ts | 2 -- .../implementations/rootLifecycleService.ts | 13 +++++++------ packages/backend-plugin-api/api-report.md | 2 +- .../src/services/definitions/LifecycleService.ts | 8 ++++++-- 7 files changed, 20 insertions(+), 15 deletions(-) diff --git a/.changeset/beige-rats-cheer.md b/.changeset/beige-rats-cheer.md index c523ffa104..a6650e2f83 100644 --- a/.changeset/beige-rats-cheer.md +++ b/.changeset/beige-rats-cheer.md @@ -2,4 +2,4 @@ '@backstage/backend-plugin-api': patch --- -Added `RootLifecycleService` and `rootLifecycleServiceRef`, as well as added a `labels` option to the existing `LifecycleServiceShutdownHook`. +Added `RootLifecycleService` and `rootLifecycleServiceRef`, as well as added a `logger` option to the existing `LifecycleServiceShutdownHook`. diff --git a/packages/backend-app-api/src/services/implementations/lifecycleService.ts b/packages/backend-app-api/src/services/implementations/lifecycleService.ts index bb864679b8..632abd238c 100644 --- a/packages/backend-app-api/src/services/implementations/lifecycleService.ts +++ b/packages/backend-app-api/src/services/implementations/lifecycleService.ts @@ -25,17 +25,19 @@ import { export const lifecycleFactory = createServiceFactory({ service: coreServices.lifecycle, deps: { + logger: coreServices.logger, rootLifecycle: coreServices.rootLifecycle, pluginMetadata: coreServices.pluginMetadata, }, async factory({ rootLifecycle }) { - return async ({ pluginMetadata }) => { + return async ({ logger, pluginMetadata }) => { const plugin = pluginMetadata.getId(); return { addShutdownHook(options: LifecycleServiceShutdownHook): void { rootLifecycle.addShutdownHook({ ...options, - labels: { ...options?.labels, plugin }, + + logger: options.logger?.child({ plugin }) ?? logger, }); }, }; diff --git a/packages/backend-app-api/src/services/implementations/rootHttpRouter/rootHttpRouterFactory.ts b/packages/backend-app-api/src/services/implementations/rootHttpRouter/rootHttpRouterFactory.ts index d8cedda0d9..45cb826b4d 100644 --- a/packages/backend-app-api/src/services/implementations/rootHttpRouter/rootHttpRouterFactory.ts +++ b/packages/backend-app-api/src/services/implementations/rootHttpRouter/rootHttpRouterFactory.ts @@ -108,7 +108,7 @@ export const rootHttpRouterFactory = createServiceFactory({ async fn() { await server.stop(); }, - labels: { service: 'rootHttpRouter' }, + logger, }); await server.start(); diff --git a/packages/backend-app-api/src/services/implementations/rootLifecycleService.test.ts b/packages/backend-app-api/src/services/implementations/rootLifecycleService.test.ts index 686827fecd..e7827e5fc3 100644 --- a/packages/backend-app-api/src/services/implementations/rootLifecycleService.test.ts +++ b/packages/backend-app-api/src/services/implementations/rootLifecycleService.test.ts @@ -22,7 +22,6 @@ describe('lifecycleService', () => { const service = new BackendLifecycleImpl(getVoidLogger()); const hook = jest.fn(); service.addShutdownHook({ - labels: { plugin: 'test' }, fn: async () => { hook(); }, @@ -37,7 +36,6 @@ describe('lifecycleService', () => { it('should not throw errors', async () => { const service = new BackendLifecycleImpl(getVoidLogger()); service.addShutdownHook({ - labels: { plugin: 'test' }, fn: async () => { throw new Error('oh no'); }, diff --git a/packages/backend-app-api/src/services/implementations/rootLifecycleService.ts b/packages/backend-app-api/src/services/implementations/rootLifecycleService.ts index 3797e6ffc5..f451c38f20 100644 --- a/packages/backend-app-api/src/services/implementations/rootLifecycleService.ts +++ b/packages/backend-app-api/src/services/implementations/rootLifecycleService.ts @@ -13,18 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; + import { createServiceFactory, coreServices, LifecycleServiceShutdownHook, RootLifecycleService, + LoggerService, } from '@backstage/backend-plugin-api'; -import { Logger } from 'winston'; const CALLBACKS = ['SIGTERM', 'SIGINT', 'beforeExit']; export class BackendLifecycleImpl implements RootLifecycleService { - constructor(private readonly logger: Logger) { + constructor(private readonly logger: LoggerService) { CALLBACKS.map(signal => process.on(signal, () => this.shutdown())); } @@ -44,11 +44,12 @@ export class BackendLifecycleImpl implements RootLifecycleService { this.logger.info(`Running ${this.#shutdownTasks.length} shutdown tasks...`); await Promise.all( this.#shutdownTasks.map(async hook => { + const { logger = this.logger } = hook; try { await hook.fn(); - this.logger.info(`Shutdown hook succeeded`, hook.labels); + logger.info(`Shutdown hook succeeded`); } catch (error) { - this.logger.error(`Shutdown hook failed, ${error}`, hook.labels); + logger.error(`Shutdown hook failed, ${error}`); } }), ); @@ -64,6 +65,6 @@ export const rootLifecycleFactory = createServiceFactory({ logger: coreServices.rootLogger, }, async factory({ logger }) { - return new BackendLifecycleImpl(loggerToWinstonLogger(logger)); + return new BackendLifecycleImpl(logger); }, }); diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 6dc36c83b3..5c689866c7 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -190,7 +190,7 @@ export interface LifecycleService { // @public (undocumented) export type LifecycleServiceShutdownHook = { fn: () => void | Promise; - labels?: Record; + logger?: LoggerService; }; // @public diff --git a/packages/backend-plugin-api/src/services/definitions/LifecycleService.ts b/packages/backend-plugin-api/src/services/definitions/LifecycleService.ts index b6f2b69e1c..25cc47270e 100644 --- a/packages/backend-plugin-api/src/services/definitions/LifecycleService.ts +++ b/packages/backend-plugin-api/src/services/definitions/LifecycleService.ts @@ -14,14 +14,18 @@ * limitations under the License. */ +import { LoggerService } from './LoggerService'; + /** * @public **/ export type LifecycleServiceShutdownHook = { fn: () => void | Promise; - /** Labels to help identify the shutdown hook */ - labels?: Record; + /** + * Optional {@link LoggerService} that will be used for logging instead of the default logger. + */ + logger?: LoggerService; }; /**