diff --git a/.changeset/angry-goats-pay.md b/.changeset/angry-goats-pay.md new file mode 100644 index 0000000000..18fc6c0f6d --- /dev/null +++ b/.changeset/angry-goats-pay.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-search-backend-module-pg': patch +--- + +Enable module only on supported databases + +Also pass logger to the service diff --git a/.changeset/eight-eggs-deny.md b/.changeset/eight-eggs-deny.md new file mode 100644 index 0000000000..2e2253e079 --- /dev/null +++ b/.changeset/eight-eggs-deny.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-react': patch +--- + +Added the `no-top-level-material-ui-4-imports` ESLint rule to aid with the migration to Material UI v5 diff --git a/.changeset/gentle-crabs-cover.md b/.changeset/gentle-crabs-cover.md new file mode 100644 index 0000000000..ff25bcb16f --- /dev/null +++ b/.changeset/gentle-crabs-cover.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-kubernetes-backend': minor +'@backstage/plugin-tech-insights-node': minor +--- + +**BREAKING** Winston logger has been replaced with `LoggerService` diff --git a/.changeset/many-pears-drop.md b/.changeset/many-pears-drop.md new file mode 100644 index 0000000000..f2557c84a1 --- /dev/null +++ b/.changeset/many-pears-drop.md @@ -0,0 +1,47 @@ +--- +'@backstage/plugin-search-backend-module-stack-overflow-collator': patch +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +'@backstage/plugin-tech-insights-backend-module-jsonfc': patch +'@backstage/plugin-catalog-backend-module-github-org': patch +'@backstage/plugin-scaffolder-backend-module-github': patch +'@backstage/plugin-catalog-backend-module-puppetdb': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-search-backend-module-techdocs': patch +'@backstage/plugin-catalog-backend-module-gerrit': patch +'@backstage/plugin-catalog-backend-module-github': patch +'@backstage/plugin-catalog-backend-module-gitlab': patch +'@backstage/plugin-search-backend-module-explore': patch +'@backstage/plugin-catalog-backend-module-azure': patch +'@backstage/plugin-catalog-backend-module-aws': patch +'@backstage/plugin-catalog-backend-module-gcp': patch +'@backstage/plugin-entity-feedback-backend': patch +'@backstage/plugin-code-coverage-backend': patch +'@backstage/plugin-tech-insights-backend': patch +'@backstage/plugin-azure-devops-backend': patch +'@backstage/plugin-azure-sites-backend': patch +'@backstage/plugin-search-backend-node': patch +'@backstage/plugin-lighthouse-backend': patch +'@backstage/plugin-permission-backend': patch +'@backstage/plugin-sonarqube-backend': patch +'@backstage/backend-app-api': patch +'@backstage/plugin-airbrake-backend': patch +'@backstage/plugin-devtools-backend': patch +'@backstage/plugin-linguist-backend': patch +'@backstage/plugin-periskop-backend': patch +'@backstage/plugin-playlist-backend': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-explore-backend': patch +'@backstage/plugin-jenkins-backend': patch +'@backstage/backend-tasks': patch +'@backstage/plugin-badges-backend': patch +'@backstage/plugin-bazaar-backend': patch +'@backstage/plugin-search-backend': patch +'@backstage/plugin-kafka-backend': patch +'@backstage/plugin-nomad-backend': patch +'@backstage/plugin-todo-backend': patch +'@backstage/plugin-adr-backend': patch +'@backstage/plugin-app-backend': patch +--- + +Replaced winston logger with `LoggerService` diff --git a/.changeset/sweet-singers-argue.md b/.changeset/sweet-singers-argue.md new file mode 100644 index 0000000000..a410c1def9 --- /dev/null +++ b/.changeset/sweet-singers-argue.md @@ -0,0 +1,19 @@ +--- +'@backstage/plugin-catalog-backend-module-github': minor +--- + +Remove use of `EventBroker` and `EventSubscriber` for the GitHub org data providers. + +BREAKING CHANGE: + +- `GithubOrgEntityProvider.onEvent` made private +- `GithubOrgEntityProvider.supportsEventTopics` removed +- `eventBroker` option was removed from `GithubMultiOrgEntityProvider.fromConfig` +- `GithubMultiOrgEntityProvider.supportsEventTopics` removed + +This change only impacts users who still use the legacy backend system +**and** who still use `eventBroker` as option when creating these +entity providers. + +Please pass the `EventsService` instance as option `events` instead. +You can find more information at the [installation documentation](https://backstage.io/docs/integrations/github/org/#legacy-backend-system). diff --git a/ADOPTERS.md b/ADOPTERS.md index 0f4506f1b1..32c136fc52 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -266,3 +266,4 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Wefox](https://www.wefox.com) | [@dibenlloch](https://github.com/dibenlloch) | Internal developer portal to consolidate all developers dashboards, company inventory with compliance reports, team management and self-service portal for IT/Team operations. | | [Aurora Innovation](https://aurorainnovation.com) | [@O5ten](https://github.com/O5ten) | Heavy usage of scaffolder, techdocs, homepage, k8s plugin and homegrown plugins to track migration paths and so on within a developer portal. It acts as a starting point for new and old developers to find all of our internal tooling in one place. | [ENSEK](https://ensek.com/) | [Timothy Deakin](https://github.com/cftad) |We are using Backstage as our internal developer portal to provide a single pane of glass for our developers to access all the tools and services they need to build and maintain our software. | +| [OP Financial Group](https://www.op.fi/op-financial-group) | [Heikki Hellgren](https://github.com/drodil), [Jyrki Koistinen](https://github.com/snyvision) | We are using Backstage as a gateway into our internal development platform offering to simplify complexity. | diff --git a/docs/overview/adopting.md b/docs/overview/adopting.md index 15450c995b..5b6c3bcaed 100644 --- a/docs/overview/adopting.md +++ b/docs/overview/adopting.md @@ -156,7 +156,11 @@ Backstage as _the_ platform: Again, any feedback is appreciated. Please use the Edit button at the bottom of the page to make a suggestion. -_**Note!** It might be tempting to try to optimize Backstage usage and +:::note Note + +It might be tempting to try to optimize Backstage usage and "engagement". Even though you want to consolidate all your tooling and technical documentation in Backstage, it is important to remember that time spent in -Backstage is time not spent writing code_ 🙃 +Backstage is time not spent writing code 🙃 + +::: diff --git a/packages/backend-app-api/src/services/implementations/scheduler/schedulerServiceFactory.ts b/packages/backend-app-api/src/services/implementations/scheduler/schedulerServiceFactory.ts index 4dfe567ccc..dc9b3a9864 100644 --- a/packages/backend-app-api/src/services/implementations/scheduler/schedulerServiceFactory.ts +++ b/packages/backend-app-api/src/services/implementations/scheduler/schedulerServiceFactory.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createServiceFactory, @@ -33,7 +32,7 @@ export const schedulerServiceFactory = createServiceFactory({ return TaskScheduler.forPlugin({ pluginId: plugin.getId(), databaseManager, - logger: loggerToWinstonLogger(logger), + logger, }); }, }); diff --git a/packages/backend-app-api/src/services/implementations/urlReader/urlReaderServiceFactory.ts b/packages/backend-app-api/src/services/implementations/urlReader/urlReaderServiceFactory.ts index 6da71ac0fc..7f404a24b1 100644 --- a/packages/backend-app-api/src/services/implementations/urlReader/urlReaderServiceFactory.ts +++ b/packages/backend-app-api/src/services/implementations/urlReader/urlReaderServiceFactory.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { loggerToWinstonLogger, UrlReaders } from '@backstage/backend-common'; +import { UrlReaders } from '@backstage/backend-common'; import { coreServices, createServiceFactory, @@ -30,7 +30,7 @@ export const urlReaderServiceFactory = createServiceFactory({ async factory({ config, logger }) { return UrlReaders.default({ config, - logger: loggerToWinstonLogger(logger), + logger, }); }, }); diff --git a/packages/backend-tasks/api-report.md b/packages/backend-tasks/api-report.md index 417fc93ed4..00ef28c9ce 100644 --- a/packages/backend-tasks/api-report.md +++ b/packages/backend-tasks/api-report.md @@ -8,7 +8,7 @@ import { Duration } from 'luxon'; import { HumanDuration as HumanDuration_2 } from '@backstage/types'; import { JsonObject } from '@backstage/types'; import { LegacyRootDatabaseService } from '@backstage/backend-common'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginDatabaseManager } from '@backstage/backend-common'; // @public @deprecated @@ -83,20 +83,23 @@ export interface TaskScheduleDefinitionConfig { // @public export class TaskScheduler { - constructor(databaseManager: LegacyRootDatabaseService, logger: Logger); + constructor( + databaseManager: LegacyRootDatabaseService, + logger: LoggerService, + ); forPlugin(pluginId: string): PluginTaskScheduler; // (undocumented) static forPlugin(opts: { pluginId: string; databaseManager: PluginDatabaseManager; - logger: Logger; + logger: LoggerService; }): PluginTaskScheduler; // (undocumented) static fromConfig( config: Config, options?: { databaseManager?: LegacyRootDatabaseService; - logger?: Logger; + logger?: LoggerService; }, ): TaskScheduler; } diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index d2a0e33c73..88de270fca 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -33,6 +33,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/types": "workspace:^", @@ -43,7 +44,6 @@ "lodash": "^4.17.21", "luxon": "^3.0.0", "uuid": "^9.0.0", - "winston": "^3.2.1", "zod": "^3.22.4" }, "devDependencies": { diff --git a/packages/backend-tasks/src/tasks/LocalTaskWorker.ts b/packages/backend-tasks/src/tasks/LocalTaskWorker.ts index 347d22e48e..e79acb35f0 100644 --- a/packages/backend-tasks/src/tasks/LocalTaskWorker.ts +++ b/packages/backend-tasks/src/tasks/LocalTaskWorker.ts @@ -17,9 +17,9 @@ import { ConflictError } from '@backstage/errors'; import { CronTime } from 'cron'; import { DateTime, Duration } from 'luxon'; -import { Logger } from 'winston'; import { TaskFunction, TaskSettingsV2 } from './types'; import { delegateAbortController, sleep } from './util'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Implements tasks that run locally without cross-host collaboration. @@ -32,7 +32,7 @@ export class LocalTaskWorker { constructor( private readonly taskId: string, private readonly fn: TaskFunction, - private readonly logger: Logger, + private readonly logger: LoggerService, ) {} start(settings: TaskSettingsV2, options?: { signal?: AbortSignal }) { diff --git a/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.ts b/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.ts index 38561c7a8c..b1647f4edf 100644 --- a/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.ts +++ b/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.ts @@ -16,20 +16,20 @@ import { Knex } from 'knex'; import { Duration } from 'luxon'; -import { Logger } from 'winston'; import { LocalTaskWorker } from './LocalTaskWorker'; import { TaskWorker } from './TaskWorker'; import { PluginTaskScheduler, TaskDescriptor, + TaskFunction, TaskInvocationDefinition, TaskRunner, TaskScheduleDefinition, TaskSettingsV2, } from './types'; import { validateId } from './util'; -import { TaskFunction } from './types'; -import { metrics, Counter, Histogram } from '@opentelemetry/api'; +import { Counter, Histogram, metrics } from '@opentelemetry/api'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Implements the actual task management. @@ -43,7 +43,7 @@ export class PluginTaskSchedulerImpl implements PluginTaskScheduler { constructor( private readonly databaseFactory: () => Promise, - private readonly logger: Logger, + private readonly logger: LoggerService, ) { const meter = metrics.getMeter('default'); this.counter = meter.createCounter('backend_tasks.task.runs.count', { diff --git a/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts b/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts index f69b7d9b88..7b6becab91 100644 --- a/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts +++ b/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts @@ -16,9 +16,9 @@ import { Knex } from 'knex'; import { Duration } from 'luxon'; -import { Logger } from 'winston'; -import { DbTasksRow, DB_TASKS_TABLE } from '../database/tables'; +import { DB_TASKS_TABLE, DbTasksRow } from '../database/tables'; import { sleep } from './util'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Makes sure to auto-expire and clean up things that time out or for other @@ -27,12 +27,12 @@ import { sleep } from './util'; export class PluginTaskSchedulerJanitor { private readonly knex: Knex; private readonly waitBetweenRuns: Duration; - private readonly logger: Logger; + private readonly logger: LoggerService; constructor(options: { knex: Knex; waitBetweenRuns: Duration; - logger: Logger; + logger: LoggerService; }) { this.knex = options.knex; this.waitBetweenRuns = options.waitBetweenRuns; diff --git a/packages/backend-tasks/src/tasks/TaskScheduler.ts b/packages/backend-tasks/src/tasks/TaskScheduler.ts index bd7bf0f776..672c52cc10 100644 --- a/packages/backend-tasks/src/tasks/TaskScheduler.ts +++ b/packages/backend-tasks/src/tasks/TaskScheduler.ts @@ -23,11 +23,11 @@ import { import { Config } from '@backstage/config'; import { once } from 'lodash'; import { Duration } from 'luxon'; -import { Logger } from 'winston'; import { migrateBackendTasks } from '../database/migrateBackendTasks'; import { PluginTaskSchedulerImpl } from './PluginTaskSchedulerImpl'; import { PluginTaskSchedulerJanitor } from './PluginTaskSchedulerJanitor'; import { PluginTaskScheduler } from './types'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Deals with the scheduling of distributed tasks. @@ -39,7 +39,7 @@ export class TaskScheduler { config: Config, options?: { databaseManager?: LegacyRootDatabaseService; - logger?: Logger; + logger?: LoggerService; }, ): TaskScheduler { const databaseManager = @@ -52,7 +52,7 @@ export class TaskScheduler { constructor( private readonly databaseManager: LegacyRootDatabaseService, - private readonly logger: Logger, + private readonly logger: LoggerService, ) {} /** @@ -72,7 +72,7 @@ export class TaskScheduler { static forPlugin(opts: { pluginId: string; databaseManager: PluginDatabaseManager; - logger: Logger; + logger: LoggerService; }): PluginTaskScheduler { const databaseFactory = once(async () => { const knex = await opts.databaseManager.getClient(); diff --git a/packages/backend-tasks/src/tasks/TaskWorker.ts b/packages/backend-tasks/src/tasks/TaskWorker.ts index fe327b38d6..57cbf2203e 100644 --- a/packages/backend-tasks/src/tasks/TaskWorker.ts +++ b/packages/backend-tasks/src/tasks/TaskWorker.ts @@ -19,10 +19,10 @@ import { CronTime } from 'cron'; import { Knex } from 'knex'; import { DateTime, Duration } from 'luxon'; import { v4 as uuid } from 'uuid'; -import { Logger } from 'winston'; -import { DbTasksRow, DB_TASKS_TABLE } from '../database/tables'; +import { DB_TASKS_TABLE, DbTasksRow } from '../database/tables'; import { TaskFunction, TaskSettingsV2, taskSettingsV2Schema } from './types'; import { delegateAbortController, nowPlus, sleep } from './util'; +import { LoggerService } from '@backstage/backend-plugin-api'; const DEFAULT_WORK_CHECK_FREQUENCY = Duration.fromObject({ seconds: 5 }); @@ -36,7 +36,7 @@ export class TaskWorker { private readonly taskId: string, private readonly fn: TaskFunction, private readonly knex: Knex, - private readonly logger: Logger, + private readonly logger: LoggerService, private readonly workCheckFrequency: Duration = DEFAULT_WORK_CHECK_FREQUENCY, ) {} diff --git a/plugins/adr-backend/api-report.md b/plugins/adr-backend/api-report.md index 9b00888435..bd8859fe69 100644 --- a/plugins/adr-backend/api-report.md +++ b/plugins/adr-backend/api-report.md @@ -15,7 +15,7 @@ import { Config } from '@backstage/config'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { Entity } from '@backstage/catalog-model'; import express from 'express'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginCacheManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { Readable } from 'stream'; @@ -29,7 +29,7 @@ export type AdrCollatorFactoryOptions = { config: Config; catalogClient?: CatalogApi; discovery: PluginEndpointDiscovery; - logger: Logger; + logger: LoggerService; parser?: AdrParser; reader: UrlReader; tokenManager: TokenManager; @@ -54,7 +54,7 @@ export default adrPlugin; export type AdrRouterOptions = { reader: UrlReader; cacheClient: CacheClient; - logger: Logger; + logger: LoggerService; }; // @public diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index ace39cf785..58bc794fd7 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -43,7 +43,6 @@ "luxon": "^3.0.0", "marked": "^12.0.0", "node-fetch": "^2.6.5", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/adr-backend/src/plugin.ts b/plugins/adr-backend/src/plugin.ts index f926ade6be..bf5c69047f 100644 --- a/plugins/adr-backend/src/plugin.ts +++ b/plugins/adr-backend/src/plugin.ts @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -38,7 +37,7 @@ export const adrPlugin = createBackendPlugin({ async init({ httpRouter, logger, reader, cache }) { httpRouter.use( await createRouter({ - logger: loggerToWinstonLogger(logger), + logger, reader, cacheClient: cache, }), diff --git a/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts b/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts index 21aa7f32a4..5e1c81220d 100644 --- a/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts +++ b/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts @@ -15,19 +15,18 @@ */ import { Readable } from 'stream'; -import { Logger } from 'winston'; import { CacheClient, + createLegacyAuthAdapters, PluginCacheManager, PluginEndpointDiscovery, TokenManager, UrlReader, - createLegacyAuthAdapters, } from '@backstage/backend-common'; import { + CATALOG_FILTER_EXISTS, CatalogApi, CatalogClient, - CATALOG_FILTER_EXISTS, } from '@backstage/catalog-client'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; @@ -47,7 +46,7 @@ import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { createMadrParser } from './createMadrParser'; import { AdrParser } from './types'; -import { AuthService } from '@backstage/backend-plugin-api'; +import { AuthService, LoggerService } from '@backstage/backend-plugin-api'; /** * Options to configure the AdrCollatorFactory @@ -78,7 +77,7 @@ export type AdrCollatorFactoryOptions = { /** * Logger */ - logger: Logger; + logger: LoggerService; /** * ADR content parser. Defaults to built in MADR parser. */ @@ -106,7 +105,7 @@ export class DefaultAdrCollatorFactory implements DocumentCollatorFactory { private readonly adrFilePathFilterFn: AdrFilePathFilterFn; private readonly cacheClient: CacheClient; private readonly catalogClient: CatalogApi; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly parser: AdrParser; private readonly reader: UrlReader; private readonly auth: AuthService; diff --git a/plugins/adr-backend/src/service/router.test.ts b/plugins/adr-backend/src/service/router.test.ts index 6836343882..f79b3e8edb 100644 --- a/plugins/adr-backend/src/service/router.test.ts +++ b/plugins/adr-backend/src/service/router.test.ts @@ -24,7 +24,7 @@ import { import express from 'express'; import request from 'supertest'; import { createRouter } from './router'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; const listEndpointName = '/list'; const fileEndpointName = '/file'; @@ -122,7 +122,7 @@ describe('createRouter', () => { cacheClient: new MockCacheClient(), logger: { error: (message: any) => message, - } as Logger, + } as LoggerService, }); app = express().use(router); }); diff --git a/plugins/adr-backend/src/service/router.ts b/plugins/adr-backend/src/service/router.ts index ed02a76e13..ab0a8afbcb 100644 --- a/plugins/adr-backend/src/service/router.ts +++ b/plugins/adr-backend/src/service/router.ts @@ -16,16 +16,16 @@ import { CacheClient, UrlReader } from '@backstage/backend-common'; import { NotModifiedError, stringifyError } from '@backstage/errors'; -import { Logger } from 'winston'; import express from 'express'; import Router from 'express-promise-router'; import { madrParser } from '../search/madrParser'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** @public */ export type AdrRouterOptions = { reader: UrlReader; cacheClient: CacheClient; - logger: Logger; + logger: LoggerService; }; /** @public */ diff --git a/plugins/airbrake-backend/api-report.md b/plugins/airbrake-backend/api-report.md index 4658767b4a..5509fc4fd6 100644 --- a/plugins/airbrake-backend/api-report.md +++ b/plugins/airbrake-backend/api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; import { Config } from '@backstage/config'; import express from 'express'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; // @public export interface AirbrakeConfig { @@ -26,6 +26,6 @@ export function extractAirbrakeConfig(config: Config): AirbrakeConfig; // @public export interface RouterOptions { airbrakeConfig: AirbrakeConfig; - logger: Logger; + logger: LoggerService; } ``` diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index 251a52deeb..6cfe432913 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -35,10 +35,10 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "http-proxy-middleware": "^2.0.0", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/http-proxy-middleware": "^1.0.0", "@types/supertest": "^2.0.8", diff --git a/plugins/airbrake-backend/src/plugin.ts b/plugins/airbrake-backend/src/plugin.ts index 83606ba115..917ffbceac 100644 --- a/plugins/airbrake-backend/src/plugin.ts +++ b/plugins/airbrake-backend/src/plugin.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -40,7 +39,7 @@ export const airbrakePlugin = createBackendPlugin({ httpRouter.use( await createRouter({ airbrakeConfig: extractAirbrakeConfig(config), - logger: loggerToWinstonLogger(logger), + logger, }), ); httpRouter.addAuthPolicy({ diff --git a/plugins/airbrake-backend/src/service/router.test.ts b/plugins/airbrake-backend/src/service/router.test.ts index 7ccafd7eba..f981b18872 100644 --- a/plugins/airbrake-backend/src/service/router.test.ts +++ b/plugins/airbrake-backend/src/service/router.test.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { getVoidLogger } from '@backstage/backend-common'; import express from 'express'; import request from 'supertest'; import { ConfigReader } from '@backstage/config'; @@ -24,17 +23,18 @@ import { RouterOptions, } from './router'; import { AirbrakeConfig, extractAirbrakeConfig } from '../config'; -import * as winston from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; +import { mockServices } from '@backstage/backend-test-utils'; describe('createRouter', () => { let app: express.Express; let airbrakeConfig: AirbrakeConfig; - let voidLogger: winston.Logger; + let voidLogger: LoggerService; beforeEach(async () => { jest.resetAllMocks(); - voidLogger = getVoidLogger(); + voidLogger = mockServices.logger.mock(); const config = new ConfigReader({ airbrake: { apiKey: 'fakeApiKey', diff --git a/plugins/airbrake-backend/src/service/router.ts b/plugins/airbrake-backend/src/service/router.ts index 5dc0b44a9b..a6d6af6d8c 100644 --- a/plugins/airbrake-backend/src/service/router.ts +++ b/plugins/airbrake-backend/src/service/router.ts @@ -17,10 +17,10 @@ import { errorHandler } from '@backstage/backend-common'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { createProxyMiddleware } from 'http-proxy-middleware'; import { AirbrakeConfig } from '../config'; import { Options } from 'http-proxy-middleware/dist/types'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * The router options that are needed when creating a router. @@ -31,7 +31,7 @@ export interface RouterOptions { /** * A logger object */ - logger: Logger; + logger: LoggerService; /** * The Airbrake config obtained from {@link extractAirbrakeConfig} diff --git a/plugins/airbrake-backend/src/service/standaloneServer.ts b/plugins/airbrake-backend/src/service/standaloneServer.ts index 6825e60a0a..31aa41d832 100644 --- a/plugins/airbrake-backend/src/service/standaloneServer.ts +++ b/plugins/airbrake-backend/src/service/standaloneServer.ts @@ -19,14 +19,14 @@ import { loadBackendConfig, } from '@backstage/backend-common'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; import { extractAirbrakeConfig } from '../config'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/app-backend/api-report.md b/plugins/app-backend/api-report.md index 79f00656f1..9ef0f97dab 100644 --- a/plugins/app-backend/api-report.md +++ b/plugins/app-backend/api-report.md @@ -8,7 +8,7 @@ import { Config } from '@backstage/config'; import { ConfigSchema } from '@backstage/config-loader'; import express from 'express'; import { HttpAuthService } from '@backstage/backend-plugin-api'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginDatabaseManager } from '@backstage/backend-common'; // @public (undocumented) @@ -26,7 +26,7 @@ export interface RouterOptions { // (undocumented) httpAuth?: HttpAuthService; // (undocumented) - logger: Logger; + logger: LoggerService; schema?: ConfigSchema; staticFallbackHandler?: express.Handler; } diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 3261810346..ee7b45a453 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -62,7 +62,6 @@ "knex": "^3.0.0", "lodash": "^4.17.21", "luxon": "^3.0.0", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts b/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts index 038d5bd9bf..05d6424013 100644 --- a/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts +++ b/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts @@ -19,10 +19,10 @@ import { resolvePackagePath, } from '@backstage/backend-common'; import { Knex } from 'knex'; -import { Logger } from 'winston'; import { DateTime } from 'luxon'; import partition from 'lodash/partition'; import { StaticAsset, StaticAssetInput, StaticAssetProvider } from './types'; +import { LoggerService } from '@backstage/backend-plugin-api'; const migrationsDir = resolvePackagePath( '@backstage/plugin-app-backend', @@ -39,7 +39,7 @@ interface StaticAssetRow { /** @internal */ export interface StaticAssetsStoreOptions { database: PluginDatabaseManager; - logger: Logger; + logger: LoggerService; } /** @@ -49,7 +49,7 @@ export interface StaticAssetsStoreOptions { */ export class StaticAssetsStore implements StaticAssetProvider { #db: Knex; - #logger: Logger; + #logger: LoggerService; #namespace: string; static async create(options: StaticAssetsStoreOptions) { @@ -65,7 +65,7 @@ export class StaticAssetsStore implements StaticAssetProvider { return new StaticAssetsStore(client, options.logger); } - private constructor(client: Knex, logger: Logger, namespace?: string) { + private constructor(client: Knex, logger: LoggerService, namespace?: string) { this.#db = client; this.#logger = logger; this.#namespace = namespace ?? 'default'; diff --git a/plugins/app-backend/src/lib/config.ts b/plugins/app-backend/src/lib/config.ts index f09ba5c5ec..df1146e746 100644 --- a/plugins/app-backend/src/lib/config.ts +++ b/plugins/app-backend/src/lib/config.ts @@ -16,7 +16,6 @@ import fs from 'fs-extra'; import { resolve as resolvePath } from 'path'; -import { Logger } from 'winston'; import { AppConfig, Config } from '@backstage/config'; import { JsonObject } from '@backstage/types'; import { @@ -24,12 +23,13 @@ import { loadConfigSchema, readEnvConfig, } from '@backstage/config-loader'; +import { LoggerService } from '@backstage/backend-plugin-api'; type InjectOptions = { appConfigs: AppConfig[]; // Directory of the static JS files to search for file to inject staticDir: string; - logger: Logger; + logger: LoggerService; }; /** diff --git a/plugins/app-backend/src/service/appPlugin.ts b/plugins/app-backend/src/service/appPlugin.ts index b3ab9ed29a..000db80911 100644 --- a/plugins/app-backend/src/service/appPlugin.ts +++ b/plugins/app-backend/src/service/appPlugin.ts @@ -20,7 +20,6 @@ import { createBackendPlugin, } from '@backstage/backend-plugin-api'; import { createRouter } from './router'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { configSchemaExtensionPoint, staticFallbackHandlerExtensionPoint, @@ -72,10 +71,8 @@ export const appPlugin = createBackendPlugin({ const appPackageName = config.getOptionalString('app.packageName') ?? 'app'; - const winstonLogger = loggerToWinstonLogger(logger); - const router = await createRouter({ - logger: winstonLogger, + logger, config, database, auth, diff --git a/plugins/app-backend/src/service/router.ts b/plugins/app-backend/src/service/router.ts index eac3b7f82d..b3242444aa 100644 --- a/plugins/app-backend/src/service/router.ts +++ b/plugins/app-backend/src/service/router.ts @@ -25,12 +25,11 @@ import express from 'express'; import Router from 'express-promise-router'; import fs from 'fs-extra'; import { resolve as resolvePath } from 'path'; -import { Logger } from 'winston'; import { injectConfig, readConfigs } from '../lib/config'; import { - StaticAssetsStore, - findStaticAssets, createStaticAssetMiddleware, + findStaticAssets, + StaticAssetsStore, } from '../lib/assets'; import { CACHE_CONTROL_MAX_CACHE, @@ -38,7 +37,11 @@ import { CACHE_CONTROL_REVALIDATE_CACHE, } from '../lib/headers'; import { ConfigSchema } from '@backstage/config-loader'; -import { AuthService, HttpAuthService } from '@backstage/backend-plugin-api'; +import { + AuthService, + HttpAuthService, + LoggerService, +} from '@backstage/backend-plugin-api'; import { AuthenticationError } from '@backstage/errors'; // express uses mime v1 while we only have types for mime v2 @@ -47,7 +50,7 @@ type Mime = { lookup(arg0: string): string }; /** @public */ export interface RouterOptions { config: Config; - logger: Logger; + logger: LoggerService; auth?: AuthService; httpAuth?: HttpAuthService; @@ -270,7 +273,7 @@ async function createEntryPointRouter({ appMode, appConfigs, }: { - logger: Logger; + logger: LoggerService; rootDir: string; assetStore?: StaticAssetsStore; staticFallbackHandler?: express.Handler; diff --git a/plugins/app-backend/src/service/standaloneServer.ts b/plugins/app-backend/src/service/standaloneServer.ts index d86b0f6807..f218c9942e 100644 --- a/plugins/app-backend/src/service/standaloneServer.ts +++ b/plugins/app-backend/src/service/standaloneServer.ts @@ -15,16 +15,16 @@ */ import { Server } from 'http'; -import { Logger } from 'winston'; import { createServiceBuilder } from '@backstage/backend-common'; import { Config } from '@backstage/config'; import { createRouter } from './router'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; config: Config; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/azure-devops-backend/api-report.md b/plugins/azure-devops-backend/api-report.md index 429a801b04..e310cb2428 100644 --- a/plugins/azure-devops-backend/api-report.md +++ b/plugins/azure-devops-backend/api-report.md @@ -15,7 +15,7 @@ import express from 'express'; import { GitRepository } from 'azure-devops-node-api/interfaces/GitInterfaces'; import { GitTag } from '@backstage/plugin-azure-devops-common'; import { LocationSpec } from '@backstage/plugin-catalog-common'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { Project } from '@backstage/plugin-azure-devops-common'; import { PullRequest } from '@backstage/plugin-azure-devops-common'; @@ -51,7 +51,7 @@ export class AzureDevOpsApi { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; urlReader: UrlReader; }, ): AzureDevOpsApi; @@ -159,7 +159,7 @@ export interface RouterOptions { // (undocumented) config: Config; // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) permissions: PermissionEvaluator; // (undocumented) diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index ca104f4e9e..b82c6046d7 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -47,7 +47,6 @@ "lodash": "^4.17.21", "mime-types": "^2.1.27", "p-limit": "^3.1.0", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts b/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts index be0ec333bb..4ed54e63eb 100644 --- a/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts +++ b/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts @@ -23,12 +23,12 @@ import { DashboardPullRequest, GitTag, Policy, + Project, PullRequest, PullRequestOptions, RepoBuild, Team, TeamMember, - Project, } from '@backstage/plugin-azure-devops-common'; import { GitPullRequest, @@ -37,20 +37,19 @@ import { GitRepository, } from 'azure-devops-node-api/interfaces/GitInterfaces'; import { + buildEncodedUrl, convertDashboardPullRequest, convertPolicy, getArtifactId, replaceReadme, - buildEncodedUrl, } from '../utils'; import { TeamMember as AdoTeamMember } from 'azure-devops-node-api/interfaces/common/VSSInterfaces'; -import { Logger } from 'winston'; import { PolicyEvaluationRecord } from 'azure-devops-node-api/interfaces/PolicyInterfaces'; import { - WebApi, getHandlerFromToken, getPersonalAccessTokenHandler, + WebApi, } from 'azure-devops-node-api'; import { TeamProjectReference, @@ -69,16 +68,17 @@ import { mappedPullRequest, mappedRepoBuild, } from './mappers'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** @public */ export class AzureDevOpsApi { - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly urlReader: UrlReader; private readonly config: Config; private readonly credentialsProvider: AzureDevOpsCredentialsProvider; private constructor( - logger: Logger, + logger: LoggerService, urlReader: UrlReader, config: Config, credentialsProvider: AzureDevOpsCredentialsProvider, @@ -91,7 +91,7 @@ export class AzureDevOpsApi { static fromConfig( config: Config, - options: { logger: Logger; urlReader: UrlReader }, + options: { logger: LoggerService; urlReader: UrlReader }, ) { const scmIntegrations = ScmIntegrations.fromConfig(config); const credentialsProvider = diff --git a/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts b/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts index ec36d17e8c..470c958f9a 100644 --- a/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts +++ b/plugins/azure-devops-backend/src/api/PullRequestsDashboardProvider.ts @@ -22,8 +22,8 @@ import { } from '@backstage/plugin-azure-devops-common'; import { AzureDevOpsApi } from './AzureDevOpsApi'; -import { Logger } from 'winston'; import limiterFactory from 'p-limit'; +import { LoggerService } from '@backstage/backend-plugin-api'; export const DEFAULT_TEAMS_LIMIT = 100; @@ -33,12 +33,12 @@ export class PullRequestsDashboardProvider { private teamMembers = new Map(); private constructor( - private readonly logger: Logger, + private readonly logger: LoggerService, private readonly azureDevOpsApi: AzureDevOpsApi, ) {} public static async create( - logger: Logger, + logger: LoggerService, azureDevOpsApi: AzureDevOpsApi, ): Promise { const provider = new PullRequestsDashboardProvider(logger, azureDevOpsApi); diff --git a/plugins/azure-devops-backend/src/plugin.ts b/plugins/azure-devops-backend/src/plugin.ts index f378e9c62e..8e8f7241f0 100644 --- a/plugins/azure-devops-backend/src/plugin.ts +++ b/plugins/azure-devops-backend/src/plugin.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -41,7 +40,7 @@ export const azureDevOpsPlugin = createBackendPlugin({ httpRouter.use( await createRouter({ config, - logger: loggerToWinstonLogger(logger), + logger, reader, permissions, }), diff --git a/plugins/azure-devops-backend/src/service/router.ts b/plugins/azure-devops-backend/src/service/router.ts index 8a3daf9f9a..6a06091b38 100644 --- a/plugins/azure-devops-backend/src/service/router.ts +++ b/plugins/azure-devops-backend/src/service/router.ts @@ -15,6 +15,11 @@ */ import { + azureDevOpsGitTagReadPermission, + azureDevOpsPermissions, + azureDevOpsPipelineReadPermission, + azureDevOpsPullRequestDashboardReadPermission, + azureDevOpsPullRequestReadPermission, DashboardPullRequest, PullRequestOptions, PullRequestStatus, @@ -22,10 +27,9 @@ import { import { AzureDevOpsApi } from '../api'; import { Config } from '@backstage/config'; -import { Logger } from 'winston'; import { - PullRequestsDashboardProvider, DEFAULT_TEAMS_LIMIT, + PullRequestsDashboardProvider, } from '../api/PullRequestsDashboardProvider'; import Router from 'express-promise-router'; import { errorHandler, UrlReader } from '@backstage/backend-common'; @@ -33,24 +37,18 @@ import express from 'express'; import { InputError, NotAllowedError } from '@backstage/errors'; import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node'; import { - PermissionEvaluator, AuthorizeResult, + PermissionEvaluator, } from '@backstage/plugin-permission-common'; import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; -import { - azureDevOpsPullRequestReadPermission, - azureDevOpsPermissions, - azureDevOpsPullRequestDashboardReadPermission, - azureDevOpsGitTagReadPermission, - azureDevOpsPipelineReadPermission, -} from '@backstage/plugin-azure-devops-common'; +import { LoggerService } from '@backstage/backend-plugin-api'; const DEFAULT_TOP = 10; /** @public */ export interface RouterOptions { azureDevOpsApi?: AzureDevOpsApi; - logger: Logger; + logger: LoggerService; config: Config; reader: UrlReader; permissions: PermissionEvaluator; diff --git a/plugins/azure-devops-backend/src/service/standaloneServer.ts b/plugins/azure-devops-backend/src/service/standaloneServer.ts index 65b13fab35..647440ac9a 100644 --- a/plugins/azure-devops-backend/src/service/standaloneServer.ts +++ b/plugins/azure-devops-backend/src/service/standaloneServer.ts @@ -16,20 +16,20 @@ import { createServiceBuilder, - loadBackendConfig, - UrlReaders, - ServerTokenManager, HostDiscovery, + loadBackendConfig, + ServerTokenManager, + UrlReaders, } from '@backstage/backend-common'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; import { ServerPermissionClient } from '@backstage/plugin-permission-node'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/azure-sites-backend/api-report.md b/plugins/azure-sites-backend/api-report.md index 611a106816..a550695a8d 100644 --- a/plugins/azure-sites-backend/api-report.md +++ b/plugins/azure-sites-backend/api-report.md @@ -13,7 +13,7 @@ import { Config } from '@backstage/config'; import { DiscoveryService } from '@backstage/backend-plugin-api'; import express from 'express'; import { HttpAuthService } from '@backstage/backend-plugin-api'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PermissionsService } from '@backstage/backend-plugin-api'; // @public (undocumented) @@ -74,7 +74,7 @@ export interface RouterOptions { // (undocumented) httpAuth?: HttpAuthService; // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) permissions: PermissionsService; } diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json index 38a35d5e08..92f10bc968 100644 --- a/plugins/azure-sites-backend/package.json +++ b/plugins/azure-sites-backend/package.json @@ -47,7 +47,6 @@ "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/azure-sites-backend/src/plugin.ts b/plugins/azure-sites-backend/src/plugin.ts index 5416e853a1..15cb032271 100644 --- a/plugins/azure-sites-backend/src/plugin.ts +++ b/plugins/azure-sites-backend/src/plugin.ts @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -54,7 +53,7 @@ export const azureSitesPlugin = createBackendPlugin({ const azureSitesApi = AzureSitesApi.fromConfig(config); httpRouter.use( await createRouter({ - logger: loggerToWinstonLogger(logger), + logger, azureSitesApi, permissions, catalogApi, diff --git a/plugins/azure-sites-backend/src/service/router.ts b/plugins/azure-sites-backend/src/service/router.ts index 79e4f46c04..965d7e56f2 100644 --- a/plugins/azure-sites-backend/src/service/router.ts +++ b/plugins/azure-sites-backend/src/service/router.ts @@ -20,29 +20,29 @@ import { } from '@backstage/backend-common'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { InputError, NotAllowedError, NotFoundError } from '@backstage/errors'; import { AuthorizeResult } from '@backstage/plugin-permission-common'; import { + AZURE_WEB_SITE_NAME_ANNOTATION, azureSitesActionPermission, azureSitesPermissions, - AZURE_WEB_SITE_NAME_ANNOTATION, } from '@backstage/plugin-azure-sites-common'; import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; import { CatalogApi } from '@backstage/catalog-client'; import { AzureSitesApi } from '../api'; import { - DiscoveryService, AuthService, + DiscoveryService, HttpAuthService, + LoggerService, PermissionsService, } from '@backstage/backend-plugin-api'; /** @public */ export interface RouterOptions { - logger: Logger; + logger: LoggerService; azureSitesApi: AzureSitesApi; catalogApi: CatalogApi; permissions: PermissionsService; diff --git a/plugins/azure-sites-backend/src/service/standaloneServer.ts b/plugins/azure-sites-backend/src/service/standaloneServer.ts index c0961f0359..848e64c5cd 100644 --- a/plugins/azure-sites-backend/src/service/standaloneServer.ts +++ b/plugins/azure-sites-backend/src/service/standaloneServer.ts @@ -21,16 +21,16 @@ import { SingleHostDiscovery, } from '@backstage/backend-common'; import { Server } from 'http'; -import { Logger } from 'winston'; import { AzureSitesApi } from '../api'; import { createRouter } from './router'; import { ServerPermissionClient } from '@backstage/plugin-permission-node'; import { CatalogClient } from '@backstage/catalog-client'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/badges-backend/api-report.md b/plugins/badges-backend/api-report.md index fb0c71dd75..38f93ff417 100644 --- a/plugins/badges-backend/api-report.md +++ b/plugins/badges-backend/api-report.md @@ -11,7 +11,7 @@ import { Entity } from '@backstage/catalog-model'; import express from 'express'; import { HttpAuthService } from '@backstage/backend-plugin-api'; import { IdentityApi } from '@backstage/plugin-auth-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { TokenManager } from '@backstage/backend-common'; @@ -152,7 +152,7 @@ export interface RouterOptions { // (undocumented) identity: IdentityApi; // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) tokenManager: TokenManager; } diff --git a/plugins/badges-backend/src/plugin.ts b/plugins/badges-backend/src/plugin.ts index 53e03f21e5..b5a1af54f5 100644 --- a/plugins/badges-backend/src/plugin.ts +++ b/plugins/badges-backend/src/plugin.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -54,7 +53,7 @@ export const badgesPlugin = createBackendPlugin({ httpRouter.use( await createRouter({ config, - logger: loggerToWinstonLogger(logger), + logger, badgeFactories: createDefaultBadgeFactories(), discovery, tokenManager, diff --git a/plugins/badges-backend/src/service/router.ts b/plugins/badges-backend/src/service/router.ts index d508a02b2a..f59d1cfd10 100644 --- a/plugins/badges-backend/src/service/router.ts +++ b/plugins/badges-backend/src/service/router.ts @@ -29,11 +29,14 @@ import { NotFoundError } from '@backstage/errors'; import { BadgeBuilder, DefaultBadgeBuilder } from '../lib/BadgeBuilder'; import { BadgeContext, BadgeFactories } from '../types'; import { isNil } from 'lodash'; -import { Logger } from 'winston'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { BadgesStore, DatabaseBadgesStore } from '../database/badgesStore'; import { createDefaultBadgeFactories } from '../badges'; -import { AuthService, HttpAuthService } from '@backstage/backend-plugin-api'; +import { + AuthService, + HttpAuthService, + LoggerService, +} from '@backstage/backend-plugin-api'; /** @public */ export interface RouterOptions { @@ -45,7 +48,7 @@ export interface RouterOptions { tokenManager: TokenManager; auth?: AuthService; httpAuth?: HttpAuthService; - logger: Logger; + logger: LoggerService; identity: IdentityApi; badgeStore?: BadgesStore; } @@ -95,7 +98,7 @@ async function obfuscatedRoute( router: express.Router, catalog: CatalogApi, badgeBuilder: BadgeBuilder, - logger: Logger, + logger: LoggerService, options: RouterOptions, config: Config, baseUrl: string, diff --git a/plugins/bazaar-backend/api-report.md b/plugins/bazaar-backend/api-report.md index 1ee889c04a..73411af071 100644 --- a/plugins/bazaar-backend/api-report.md +++ b/plugins/bazaar-backend/api-report.md @@ -6,7 +6,7 @@ import { Config } from '@backstage/config'; import express from 'express'; import { IdentityApi } from '@backstage/plugin-auth-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginDatabaseManager } from '@backstage/backend-common'; // @public (undocumented) @@ -21,7 +21,7 @@ export interface RouterOptions { // (undocumented) identity: IdentityApi; // (undocumented) - logger: Logger; + logger: LoggerService; } // (No @packageDocumentation comment for this package) diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 6765c3c300..514851c287 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -54,7 +54,6 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "knex": "^3.0.0", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/bazaar-backend/src/alpha.ts b/plugins/bazaar-backend/src/alpha.ts index 466181e073..ff1c78bac3 100644 --- a/plugins/bazaar-backend/src/alpha.ts +++ b/plugins/bazaar-backend/src/alpha.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -43,7 +42,7 @@ export default createBackendPlugin({ database, config, identity, - logger: loggerToWinstonLogger(logger), + logger, }), ); }, diff --git a/plugins/bazaar-backend/src/service/router.ts b/plugins/bazaar-backend/src/service/router.ts index f902d0e8cc..cb4dcec0d5 100644 --- a/plugins/bazaar-backend/src/service/router.ts +++ b/plugins/bazaar-backend/src/service/router.ts @@ -17,14 +17,14 @@ import { errorHandler, PluginDatabaseManager } from '@backstage/backend-common'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { Config } from '@backstage/config'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { DatabaseHandler } from './DatabaseHandler'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** @public */ export interface RouterOptions { - logger: Logger; + logger: LoggerService; database: PluginDatabaseManager; config: Config; identity: IdentityApi; diff --git a/plugins/bazaar-backend/src/service/standaloneServer.ts b/plugins/bazaar-backend/src/service/standaloneServer.ts index c222777aae..b4aabe074f 100644 --- a/plugins/bazaar-backend/src/service/standaloneServer.ts +++ b/plugins/bazaar-backend/src/service/standaloneServer.ts @@ -15,20 +15,20 @@ */ import { - DatabaseManager, createServiceBuilder, + DatabaseManager, loadBackendConfig, } from '@backstage/backend-common'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; import { ConfigReader } from '@backstage/config'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/catalog-backend-module-aws/api-report.md b/plugins/catalog-backend-module-aws/api-report.md index a7a3f6816a..5098ab5c32 100644 --- a/plugins/catalog-backend-module-aws/api-report.md +++ b/plugins/catalog-backend-module-aws/api-report.md @@ -14,7 +14,7 @@ import type { Entity } from '@backstage/catalog-model'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { TaskRunner } from '@backstage/backend-tasks'; import { UrlReader } from '@backstage/backend-common'; @@ -60,7 +60,7 @@ export class AwsOrganizationCloudAccountProcessor implements CatalogProcessor { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; }, ): Promise; // (undocumented) @@ -95,7 +95,7 @@ export class AwsS3EntityProvider implements EntityProvider { static fromConfig( configRoot: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -103,7 +103,7 @@ export class AwsS3EntityProvider implements EntityProvider { // (undocumented) getProviderName(): string; // (undocumented) - refresh(logger: Logger): Promise; + refresh(logger: LoggerService): Promise; } // @public diff --git a/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.ts b/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.ts index e7816ae12f..5568b8b3d8 100644 --- a/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.ts +++ b/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendModule, @@ -41,7 +40,7 @@ export const catalogModuleAwsS3EntityProvider = createBackendModule({ async init({ config, catalog, logger, scheduler }) { catalog.addEntityProvider( AwsS3EntityProvider.fromConfig(config, { - logger: loggerToWinstonLogger(logger), + logger, scheduler, }), ); diff --git a/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts b/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts index a87a83ec4b..4a454fce6f 100644 --- a/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts +++ b/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts @@ -27,12 +27,12 @@ import { ListAccountsResponse, Organizations, } from '@aws-sdk/client-organizations'; -import { Logger } from 'winston'; import { readAwsOrganizationConfig } from '../awsOrganization/config'; import { AwsCredentialProvider, DefaultAwsCredentialsManager, } from '@backstage/integration-aws-node'; +import { LoggerService } from '@backstage/backend-plugin-api'; const AWS_ORGANIZATION_REGION = 'us-east-1'; const LOCATION_TYPE = 'aws-cloud-accounts'; @@ -54,9 +54,9 @@ const ACCOUNT_STATUS_LABEL = 'amazonaws.com/account-status'; */ export class AwsOrganizationCloudAccountProcessor implements CatalogProcessor { private readonly organizations: Organizations; - private readonly logger: Logger; + private readonly logger: LoggerService; - static async fromConfig(config: Config, options: { logger: Logger }) { + static async fromConfig(config: Config, options: { logger: LoggerService }) { const c = config.getOptionalConfig('catalog.processors.awsOrganization'); const orgConfig = c ? readAwsOrganizationConfig(c) : undefined; const awsCredentialsManager = @@ -72,7 +72,7 @@ export class AwsOrganizationCloudAccountProcessor implements CatalogProcessor { private constructor( private readonly credProvider: AwsCredentialProvider, - logger: Logger, + logger: LoggerService, ) { this.logger = logger?.child({ target: this.getProcessorName(), diff --git a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts index 25631b2f99..91ba76b695 100644 --- a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts +++ b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts @@ -31,12 +31,12 @@ import { S3, } from '@aws-sdk/client-s3'; import * as uuid from 'uuid'; -import { Logger } from 'winston'; import { getEndpointFromInstructions } from '@aws-sdk/middleware-endpoint'; import { AwsCredentialsManager, DefaultAwsCredentialsManager, } from '@backstage/integration-aws-node'; +import { LoggerService } from '@backstage/backend-plugin-api'; // TODO: event-based updates using S3 events (+ queue like SQS)? /** @@ -47,7 +47,7 @@ import { * @public */ export class AwsS3EntityProvider implements EntityProvider { - private readonly logger: Logger; + private readonly logger: LoggerService; private s3?: S3; private readonly scheduleFn: () => Promise; private connection?: EntityProviderConnection; @@ -56,7 +56,7 @@ export class AwsS3EntityProvider implements EntityProvider { static fromConfig( configRoot: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -106,7 +106,7 @@ export class AwsS3EntityProvider implements EntityProvider { private readonly config: AwsS3Config, private readonly integration: AwsS3Integration, private readonly awsCredentialsManager: AwsCredentialsManager, - logger: Logger, + logger: LoggerService, taskRunner: TaskRunner, ) { this.logger = logger.child({ @@ -176,7 +176,7 @@ export class AwsS3EntityProvider implements EntityProvider { await this.scheduleFn(); } - async refresh(logger: Logger) { + async refresh(logger: LoggerService) { if (!this.connection) { throw new Error('Not initialized'); } diff --git a/plugins/catalog-backend-module-azure/api-report.md b/plugins/catalog-backend-module-azure/api-report.md index 596ebbf6cf..a449909dbf 100644 --- a/plugins/catalog-backend-module-azure/api-report.md +++ b/plugins/catalog-backend-module-azure/api-report.md @@ -9,7 +9,7 @@ import { Config } from '@backstage/config'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { TaskRunner } from '@backstage/backend-tasks'; @@ -18,13 +18,13 @@ import { TaskRunner } from '@backstage/backend-tasks'; export class AzureDevOpsDiscoveryProcessor implements CatalogProcessor { constructor(options: { integrations: ScmIntegrationRegistry; - logger: Logger; + logger: LoggerService; }); // (undocumented) static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; }, ): AzureDevOpsDiscoveryProcessor; // (undocumented) @@ -45,7 +45,7 @@ export class AzureDevOpsEntityProvider implements EntityProvider { static fromConfig( configRoot: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -53,6 +53,6 @@ export class AzureDevOpsEntityProvider implements EntityProvider { // (undocumented) getProviderName(): string; // (undocumented) - refresh(logger: Logger): Promise; + refresh(logger: LoggerService): Promise; } ``` diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 0b6ce02bb4..aa9016a301 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -57,8 +57,7 @@ "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "node-fetch": "^2.6.7", - "uuid": "^9.0.0", - "winston": "^3.2.1" + "uuid": "^9.0.0" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.ts b/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.ts index b9c55041b3..cb4d5a1bf8 100644 --- a/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.ts +++ b/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.ts @@ -14,10 +14,9 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { - createBackendModule, coreServices, + createBackendModule, } from '@backstage/backend-plugin-api'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { AzureDevOpsEntityProvider } from '../providers'; @@ -41,7 +40,7 @@ export const catalogModuleAzureDevOpsEntityProvider = createBackendModule({ async init({ config, catalog, logger, scheduler }) { catalog.addEntityProvider( AzureDevOpsEntityProvider.fromConfig(config, { - logger: loggerToWinstonLogger(logger), + logger, scheduler, }), ); diff --git a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts index ddb3c5f59f..9156b5a9d7 100644 --- a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts @@ -27,8 +27,8 @@ import { processingResult, } from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; -import { Logger } from 'winston'; import { codeSearch } from '../lib'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Extracts repositories out of an Azure DevOps org. @@ -49,9 +49,9 @@ import { codeSearch } from '../lib'; export class AzureDevOpsDiscoveryProcessor implements CatalogProcessor { private readonly integrations: ScmIntegrationRegistry; private readonly credentialsProvider: AzureDevOpsCredentialsProvider; - private readonly logger: Logger; + private readonly logger: LoggerService; - static fromConfig(config: Config, options: { logger: Logger }) { + static fromConfig(config: Config, options: { logger: LoggerService }) { const integrations = ScmIntegrations.fromConfig(config); return new AzureDevOpsDiscoveryProcessor({ @@ -62,7 +62,7 @@ export class AzureDevOpsDiscoveryProcessor implements CatalogProcessor { constructor(options: { integrations: ScmIntegrationRegistry; - logger: Logger; + logger: LoggerService; }) { this.integrations = options.integrations; this.logger = options.logger; diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts index 44e618ffcd..60c7354636 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts @@ -29,10 +29,10 @@ import { } from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { readAzureDevOpsConfigs } from './config'; -import { Logger } from 'winston'; import { AzureDevOpsConfig } from './types'; import * as uuid from 'uuid'; import { codeSearch, CodeSearchResultItem } from '../lib'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Provider which discovers catalog files within an Azure DevOps repositories. @@ -42,14 +42,14 @@ import { codeSearch, CodeSearchResultItem } from '../lib'; * @public */ export class AzureDevOpsEntityProvider implements EntityProvider { - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly scheduleFn: () => Promise; private connection?: EntityProviderConnection; static fromConfig( configRoot: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -98,7 +98,7 @@ export class AzureDevOpsEntityProvider implements EntityProvider { private readonly config: AzureDevOpsConfig, private readonly integration: AzureIntegration, private readonly credentialsProvider: AzureDevOpsCredentialsProvider, - logger: Logger, + logger: LoggerService, taskRunner: TaskRunner, ) { this.logger = logger.child({ @@ -144,7 +144,7 @@ export class AzureDevOpsEntityProvider implements EntityProvider { await this.scheduleFn(); } - async refresh(logger: Logger) { + async refresh(logger: LoggerService) { if (!this.connection) { throw new Error('Not initialized'); } diff --git a/plugins/catalog-backend-module-bitbucket-server/api-report.md b/plugins/catalog-backend-module-bitbucket-server/api-report.md index 467294f3b0..b63309415b 100644 --- a/plugins/catalog-backend-module-bitbucket-server/api-report.md +++ b/plugins/catalog-backend-module-bitbucket-server/api-report.md @@ -9,7 +9,7 @@ import { Entity } from '@backstage/catalog-model'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { Response as Response_2 } from 'node-fetch'; import { TaskRunner } from '@backstage/backend-tasks'; @@ -55,7 +55,7 @@ export class BitbucketServerEntityProvider implements EntityProvider { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; parser?: BitbucketServerLocationParser; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; @@ -64,7 +64,7 @@ export class BitbucketServerEntityProvider implements EntityProvider { // (undocumented) getProviderName(): string; // (undocumented) - refresh(logger: Logger): Promise; + refresh(logger: LoggerService): Promise; } // @public (undocumented) @@ -78,7 +78,7 @@ export type BitbucketServerListOptions = { export type BitbucketServerLocationParser = (options: { client: BitbucketServerClient; location: LocationSpec; - logger: Logger; + logger: LoggerService; }) => AsyncIterable; // @public (undocumented) diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 6808b27064..8bae871d5a 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -54,8 +54,7 @@ "@backstage/plugin-catalog-node": "workspace:^", "@types/node-fetch": "^2.5.12", "node-fetch": "^2.6.7", - "uuid": "^9.0.0", - "winston": "^3.2.1" + "uuid": "^9.0.0" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts index dd2a423cdc..3b9a44f5a2 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendModule, @@ -37,9 +36,8 @@ export const catalogModuleBitbucketServerEntityProvider = createBackendModule({ scheduler: coreServices.scheduler, }, async init({ catalog, config, logger, scheduler }) { - const winstonLogger = loggerToWinstonLogger(logger); const providers = BitbucketServerEntityProvider.fromConfig(config, { - logger: winstonLogger, + logger, scheduler, }); diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts index 95bda0e910..a4cb8f1f21 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts @@ -26,7 +26,6 @@ import { EntityProvider, EntityProviderConnection, } from '@backstage/plugin-catalog-node'; -import { Logger } from 'winston'; import * as uuid from 'uuid'; import { BitbucketServerClient, paginated } from '../lib'; import { @@ -37,6 +36,7 @@ import { BitbucketServerLocationParser, defaultBitbucketServerLocationParser, } from './BitbucketServerLocationParser'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Discovers catalog files located in Bitbucket Server. @@ -50,14 +50,14 @@ export class BitbucketServerEntityProvider implements EntityProvider { private readonly integration: BitbucketServerIntegration; private readonly config: BitbucketServerEntityProviderConfig; private readonly parser: BitbucketServerLocationParser; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly scheduleFn: () => Promise; private connection?: EntityProviderConnection; static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; parser?: BitbucketServerLocationParser; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; @@ -102,7 +102,7 @@ export class BitbucketServerEntityProvider implements EntityProvider { private constructor( config: BitbucketServerEntityProviderConfig, integration: BitbucketServerIntegration, - logger: Logger, + logger: LoggerService, taskRunner: TaskRunner, parser?: BitbucketServerLocationParser, ) { @@ -151,7 +151,7 @@ export class BitbucketServerEntityProvider implements EntityProvider { await this.scheduleFn(); } - async refresh(logger: Logger) { + async refresh(logger: LoggerService) { if (!this.connection) { throw new Error('Not initialized'); } diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts index e5d48f92b8..6aea23387e 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts @@ -19,8 +19,8 @@ import { locationSpecToLocationEntity, } from '@backstage/plugin-catalog-node'; import { Entity } from '@backstage/catalog-model'; -import { Logger } from 'winston'; import { BitbucketServerClient } from '../lib'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * A custom callback that reacts to finding a location by yielding entities. @@ -31,7 +31,7 @@ import { BitbucketServerClient } from '../lib'; export type BitbucketServerLocationParser = (options: { client: BitbucketServerClient; location: LocationSpec; - logger: Logger; + logger: LoggerService; }) => AsyncIterable; export const defaultBitbucketServerLocationParser = diff --git a/plugins/catalog-backend-module-gcp/api-report.md b/plugins/catalog-backend-module-gcp/api-report.md index b20b9c8363..6ac42a1244 100644 --- a/plugins/catalog-backend-module-gcp/api-report.md +++ b/plugins/catalog-backend-module-gcp/api-report.md @@ -8,7 +8,7 @@ import { Config } from '@backstage/config'; import * as container from '@google-cloud/container'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { SchedulerService } from '@backstage/backend-plugin-api'; // @public @@ -25,7 +25,7 @@ export class GkeEntityProvider implements EntityProvider { scheduler, config, }: { - logger: Logger; + logger: LoggerService; scheduler: SchedulerService; config: Config; }): GkeEntityProvider; @@ -36,7 +36,7 @@ export class GkeEntityProvider implements EntityProvider { config, clusterManagerClient, }: { - logger: Logger; + logger: LoggerService; scheduler: SchedulerService; config: Config; clusterManagerClient: container.v1.ClusterManagerClient; diff --git a/plugins/catalog-backend-module-gcp/package.json b/plugins/catalog-backend-module-gcp/package.json index 2f6125fa48..9ffd453ada 100644 --- a/plugins/catalog-backend-module-gcp/package.json +++ b/plugins/catalog-backend-module-gcp/package.json @@ -56,8 +56,7 @@ "@backstage/config": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-kubernetes-common": "workspace:^", - "@google-cloud/container": "^5.0.0", - "winston": "^3.2.1" + "@google-cloud/container": "^5.0.0" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/catalog-backend-module-gcp/src/module/catalogModuleGcpGkeEntityProvider.ts b/plugins/catalog-backend-module-gcp/src/module/catalogModuleGcpGkeEntityProvider.ts index acc216e1f6..03359139d5 100644 --- a/plugins/catalog-backend-module-gcp/src/module/catalogModuleGcpGkeEntityProvider.ts +++ b/plugins/catalog-backend-module-gcp/src/module/catalogModuleGcpGkeEntityProvider.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendModule, @@ -41,7 +40,7 @@ export const catalogModuleGcpGkeEntityProvider = createBackendModule({ async init({ config, catalog, logger, scheduler }) { catalog.addEntityProvider( GkeEntityProvider.fromConfig({ - logger: loggerToWinstonLogger(logger), + logger, scheduler, config, }), diff --git a/plugins/catalog-backend-module-gcp/src/providers/GkeEntityProvider.ts b/plugins/catalog-backend-module-gcp/src/providers/GkeEntityProvider.ts index 3b2be79587..d644a8383c 100644 --- a/plugins/catalog-backend-module-gcp/src/providers/GkeEntityProvider.ts +++ b/plugins/catalog-backend-module-gcp/src/providers/GkeEntityProvider.ts @@ -14,16 +14,14 @@ * limitations under the License. */ import { - TaskRunner, readTaskScheduleDefinitionFromConfig, + TaskRunner, } from '@backstage/backend-tasks'; import { DeferredEntity, EntityProvider, EntityProviderConnection, } from '@backstage/plugin-catalog-node'; - -import { Logger } from 'winston'; import * as container from '@google-cloud/container'; import { ANNOTATION_KUBERNETES_API_SERVER, @@ -33,7 +31,7 @@ import { ANNOTATION_KUBERNETES_DASHBOARD_PARAMETERS, } from '@backstage/plugin-kubernetes-common'; import { Config } from '@backstage/config'; -import { SchedulerService } from '@backstage/backend-plugin-api'; +import { LoggerService, SchedulerService } from '@backstage/backend-plugin-api'; import { ANNOTATION_LOCATION, ANNOTATION_ORIGIN_LOCATION, @@ -45,14 +43,14 @@ import { * @public */ export class GkeEntityProvider implements EntityProvider { - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly scheduleFn: () => Promise; private readonly gkeParents: string[]; private readonly clusterManagerClient: container.v1.ClusterManagerClient; private connection?: EntityProviderConnection; private constructor( - logger: Logger, + logger: LoggerService, taskRunner: TaskRunner, gkeParents: string[], clusterManagerClient: container.v1.ClusterManagerClient, @@ -68,7 +66,7 @@ export class GkeEntityProvider implements EntityProvider { scheduler, config, }: { - logger: Logger; + logger: LoggerService; scheduler: SchedulerService; config: Config; }) { @@ -86,7 +84,7 @@ export class GkeEntityProvider implements EntityProvider { config, clusterManagerClient, }: { - logger: Logger; + logger: LoggerService; scheduler: SchedulerService; config: Config; clusterManagerClient: container.v1.ClusterManagerClient; diff --git a/plugins/catalog-backend-module-gerrit/api-report.md b/plugins/catalog-backend-module-gerrit/api-report.md index f64e697555..a4620a1c15 100644 --- a/plugins/catalog-backend-module-gerrit/api-report.md +++ b/plugins/catalog-backend-module-gerrit/api-report.md @@ -6,7 +6,7 @@ import { Config } from '@backstage/config'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { TaskRunner } from '@backstage/backend-tasks'; @@ -18,7 +18,7 @@ export class GerritEntityProvider implements EntityProvider { static fromConfig( configRoot: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -26,7 +26,7 @@ export class GerritEntityProvider implements EntityProvider { // (undocumented) getProviderName(): string; // (undocumented) - refresh(logger: Logger): Promise; + refresh(logger: LoggerService): Promise; } // (No @packageDocumentation comment for this package) diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index c2fb6fd1c1..ea59066c0c 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -54,8 +54,7 @@ "@backstage/plugin-catalog-node": "workspace:^", "fs-extra": "^11.2.0", "node-fetch": "^2.6.7", - "uuid": "^9.0.0", - "winston": "^3.2.1" + "uuid": "^9.0.0" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.ts b/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.ts index af870d095f..e0efbabefd 100644 --- a/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.ts +++ b/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendModule, @@ -37,9 +36,8 @@ export const catalogModuleGerritEntityProvider = createBackendModule({ scheduler: coreServices.scheduler, }, async init({ catalog, config, logger, scheduler }) { - const winstonLogger = loggerToWinstonLogger(logger); const providers = GerritEntityProvider.fromConfig(config, { - logger: winstonLogger, + logger, scheduler, }); diff --git a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts index c773004532..ee4a33f395 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts @@ -32,23 +32,23 @@ import { ScmIntegrations, } from '@backstage/integration'; import * as uuid from 'uuid'; -import { Logger } from 'winston'; import { readGerritConfigs } from './config'; import { GerritProjectQueryResult, GerritProviderConfig } from './types'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** @public */ export class GerritEntityProvider implements EntityProvider { private readonly config: GerritProviderConfig; private readonly integration: GerritIntegration; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly scheduleFn: () => Promise; private connection?: EntityProviderConnection; static fromConfig( configRoot: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -94,7 +94,7 @@ export class GerritEntityProvider implements EntityProvider { private constructor( config: GerritProviderConfig, integration: GerritIntegration, - logger: Logger, + logger: LoggerService, taskRunner: TaskRunner, ) { this.config = config; @@ -139,7 +139,7 @@ export class GerritEntityProvider implements EntityProvider { }; } - async refresh(logger: Logger): Promise { + async refresh(logger: LoggerService): Promise { if (!this.connection) { throw new Error('Gerrit discovery connection not initialized'); } diff --git a/plugins/catalog-backend-module-github-org/src/module.ts b/plugins/catalog-backend-module-github-org/src/module.ts index 5aeec60572..0baa768644 100644 --- a/plugins/catalog-backend-module-github-org/src/module.ts +++ b/plugins/catalog-backend-module-github-org/src/module.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendModule, @@ -111,7 +110,7 @@ export const catalogModuleGithubOrgEntityProvider = createBackendModule({ schedule: scheduler.createScheduledTaskRunner( definition.schedule, ), - logger: loggerToWinstonLogger(logger), + logger, userTransformer, teamTransformer, }), diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index 8367393e7f..b53d1b7b17 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -11,7 +11,6 @@ import { Config } from '@backstage/config'; import { Entity } from '@backstage/catalog-model'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; -import { EventBroker } from '@backstage/plugin-events-node'; import { EventParams } from '@backstage/plugin-events-node'; import { EventsService } from '@backstage/plugin-events-node'; import { EventSubscriber } from '@backstage/plugin-events-node'; @@ -19,7 +18,7 @@ import { GithubCredentialsProvider } from '@backstage/integration'; import { GithubIntegrationConfig } from '@backstage/integration'; import { graphql } from '@octokit/graphql'; import { LocationSpec } from '@backstage/plugin-catalog-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { ScmIntegrationRegistry } from '@backstage/integration'; @@ -41,14 +40,14 @@ export const defaultUserTransformer: ( export class GithubDiscoveryProcessor implements CatalogProcessor { constructor(options: { integrations: ScmIntegrationRegistry; - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; }); // (undocumented) static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; }, ): GithubDiscoveryProcessor; @@ -70,7 +69,7 @@ export class GitHubEntityProvider implements EntityProvider { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -78,7 +77,7 @@ export class GitHubEntityProvider implements EntityProvider { // (undocumented) getProviderName(): string; // (undocumented) - refresh(logger: Logger): Promise; + refresh(logger: LoggerService): Promise; } // @public @@ -90,7 +89,7 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber { config: Config, options: { events?: EventsService; - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -100,7 +99,7 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber { // (undocumented) onEvent(params: EventParams): Promise; // (undocumented) - refresh(logger: Logger): Promise; + refresh(logger: LoggerService): Promise; // (undocumented) supportsEventTopics(): string[]; } @@ -147,7 +146,7 @@ export class GithubMultiOrgEntityProvider implements EntityProvider { gitHubConfig: GithubIntegrationConfig; githubCredentialsProvider: GithubCredentialsProvider; githubUrl: string; - logger: Logger; + logger: LoggerService; orgs?: string[]; userTransformer?: UserTransformer; teamTransformer?: TeamTransformer; @@ -161,18 +160,16 @@ export class GithubMultiOrgEntityProvider implements EntityProvider { ): GithubMultiOrgEntityProvider; // (undocumented) getProviderName(): string; - read(options?: { logger?: Logger }): Promise; + read(options?: { logger?: LoggerService }): Promise; } // @public export interface GithubMultiOrgEntityProviderOptions { - // @deprecated - eventBroker?: EventBroker; events?: EventsService; githubCredentialsProvider?: GithubCredentialsProvider; githubUrl: string; id: string; - logger: Logger; + logger: LoggerService; orgs?: string[]; schedule?: 'manual' | TaskRunner; teamTransformer?: TeamTransformer; @@ -183,7 +180,7 @@ export interface GithubMultiOrgEntityProviderOptions { export class GithubMultiOrgReaderProcessor implements CatalogProcessor { constructor(options: { integrations: ScmIntegrationRegistry; - logger: Logger; + logger: LoggerService; orgs: GithubMultiOrgConfig; githubCredentialsProvider?: GithubCredentialsProvider; userTransformer?: UserTransformer; @@ -193,7 +190,7 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; userTransformer?: UserTransformer; teamTransformer?: TeamTransformer; @@ -219,15 +216,13 @@ export class GitHubOrgEntityProvider extends GithubOrgEntityProvider { } // @public -export class GithubOrgEntityProvider - implements EntityProvider, EventSubscriber -{ +export class GithubOrgEntityProvider implements EntityProvider { constructor(options: { events?: EventsService; id: string; orgUrl: string; gitHubConfig: GithubIntegrationConfig; - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; userTransformer?: UserTransformer; teamTransformer?: TeamTransformer; @@ -241,11 +236,7 @@ export class GithubOrgEntityProvider ): GithubOrgEntityProvider; // (undocumented) getProviderName(): string; - // (undocumented) - onEvent(params: EventParams): Promise; - read(options?: { logger?: Logger }): Promise; - // (undocumented) - supportsEventTopics(): string[]; + read(options?: { logger?: LoggerService }): Promise; } // @public @deprecated (undocumented) @@ -256,7 +247,7 @@ export interface GithubOrgEntityProviderOptions { events?: EventsService; githubCredentialsProvider?: GithubCredentialsProvider; id: string; - logger: Logger; + logger: LoggerService; orgUrl: string; schedule?: 'manual' | TaskRunner; teamTransformer?: TeamTransformer; @@ -267,14 +258,14 @@ export interface GithubOrgEntityProviderOptions { export class GithubOrgReaderProcessor implements CatalogProcessor { constructor(options: { integrations: ScmIntegrationRegistry; - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; }); // (undocumented) static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; }, ): GithubOrgReaderProcessor; diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 38c266f21e..185eb82780 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -66,8 +66,7 @@ "lodash": "^4.17.21", "minimatch": "^9.0.0", "node-fetch": "^2.6.7", - "uuid": "^9.0.0", - "winston": "^3.2.1" + "uuid": "^9.0.0" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/catalog-backend-module-github/src/deprecated.ts b/plugins/catalog-backend-module-github/src/deprecated.ts index e27a856358..cd1d7db62a 100644 --- a/plugins/catalog-backend-module-github/src/deprecated.ts +++ b/plugins/catalog-backend-module-github/src/deprecated.ts @@ -20,12 +20,12 @@ import { EntityProvider, EntityProviderConnection, } from '@backstage/plugin-catalog-node'; -import { Logger } from 'winston'; import { GithubEntityProvider } from './providers/GithubEntityProvider'; import { GithubOrgEntityProvider, GithubOrgEntityProviderOptions, } from './providers/GithubOrgEntityProvider'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * @public @@ -57,7 +57,7 @@ export class GitHubEntityProvider implements EntityProvider { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -80,7 +80,7 @@ export class GitHubEntityProvider implements EntityProvider { return this.delegate.getProviderName(); } - refresh(logger: Logger): Promise { + refresh(logger: LoggerService): Promise { return this.delegate.refresh(logger); } } diff --git a/plugins/catalog-backend-module-github/src/module/githubCatalogModule.ts b/plugins/catalog-backend-module-github/src/module/githubCatalogModule.ts index 761e6ebdb2..0b46e1a023 100644 --- a/plugins/catalog-backend-module-github/src/module/githubCatalogModule.ts +++ b/plugins/catalog-backend-module-github/src/module/githubCatalogModule.ts @@ -15,10 +15,9 @@ */ import { - createBackendModule, coreServices, + createBackendModule, } from '@backstage/backend-plugin-api'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { catalogAnalysisExtensionPoint, catalogProcessingExtensionPoint, @@ -68,7 +67,7 @@ export const githubCatalogModule = createBackendModule({ catalog.addEntityProvider( GithubEntityProvider.fromConfig(config, { events, - logger: loggerToWinstonLogger(logger), + logger, scheduler, }), ); diff --git a/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts index 0907b8ac8d..551f1f9c38 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts @@ -28,8 +28,8 @@ import { processingResult, } from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; -import { Logger } from 'winston'; import { getOrganizationRepositories } from '../lib'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Extracts repositories out of a GitHub org. @@ -49,13 +49,13 @@ import { getOrganizationRepositories } from '../lib'; */ export class GithubDiscoveryProcessor implements CatalogProcessor { private readonly integrations: ScmIntegrationRegistry; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly githubCredentialsProvider: GithubCredentialsProvider; static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; }, ) { @@ -69,7 +69,7 @@ export class GithubDiscoveryProcessor implements CatalogProcessor { constructor(options: { integrations: ScmIntegrationRegistry; - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; }) { this.integrations = options.integrations; diff --git a/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts index 8bfbd20e2e..8af528dfcf 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts @@ -36,7 +36,6 @@ import { processingResult, } from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; -import { Logger } from 'winston'; import { assignGroupsToUsers, buildOrgHierarchy, @@ -50,6 +49,7 @@ import { UserTransformer, } from '../lib'; import { areGroupEntities, areUserEntities } from '../lib/guards'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Extracts teams and users out of a multiple GitHub orgs namespaced per org. @@ -61,13 +61,13 @@ import { areGroupEntities, areUserEntities } from '../lib/guards'; export class GithubMultiOrgReaderProcessor implements CatalogProcessor { private readonly integrations: ScmIntegrationRegistry; private readonly orgs: GithubMultiOrgConfig; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly githubCredentialsProvider: GithubCredentialsProvider; static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; userTransformer?: UserTransformer; teamTransformer?: TeamTransformer; @@ -86,7 +86,7 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { constructor( private options: { integrations: ScmIntegrationRegistry; - logger: Logger; + logger: LoggerService; orgs: GithubMultiOrgConfig; githubCredentialsProvider?: GithubCredentialsProvider; userTransformer?: UserTransformer; diff --git a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts index 63a273378b..49ff7cc07e 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts @@ -29,7 +29,6 @@ import { processingResult, } from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; -import { Logger } from 'winston'; import { assignGroupsToUsers, buildOrgHierarchy, @@ -38,6 +37,7 @@ import { parseGithubOrgUrl, } from '../lib'; import { areGroupEntities, areUserEntities } from '../lib/guards'; +import { LoggerService } from '@backstage/backend-plugin-api'; type GraphQL = typeof graphql; @@ -52,13 +52,13 @@ type GraphQL = typeof graphql; */ export class GithubOrgReaderProcessor implements CatalogProcessor { private readonly integrations: ScmIntegrationRegistry; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly githubCredentialsProvider: GithubCredentialsProvider; static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; }, ) { @@ -72,7 +72,7 @@ export class GithubOrgReaderProcessor implements CatalogProcessor { constructor(options: { integrations: ScmIntegrationRegistry; - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; }) { this.integrations = options.integrations; diff --git a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts index 3c1e6c390b..b6805a1c24 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts @@ -18,9 +18,9 @@ import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; import { GithubCredentialsProvider, - ScmIntegrations, - GithubIntegrationConfig, GithubIntegration, + GithubIntegrationConfig, + ScmIntegrations, SingleInstanceGithubCredentialsProvider, } from '@backstage/integration'; import { @@ -34,15 +34,14 @@ import { LocationSpec } from '@backstage/plugin-catalog-common'; import { graphql } from '@octokit/graphql'; import * as uuid from 'uuid'; -import { Logger } from 'winston'; import { - readProviderConfigs, GithubEntityProviderConfig, + readProviderConfigs, } from './GithubEntityProviderConfig'; import { getOrganizationRepositories } from '../lib/github'; import { - satisfiesTopicFilter, satisfiesForkFilter, + satisfiesTopicFilter, satisfiesVisibilityFilter, } from '../lib/util'; @@ -51,8 +50,9 @@ import { EventsService, EventSubscriber, } from '@backstage/plugin-events-node'; -import { PushEvent, Commit } from '@octokit/webhooks-types'; +import { Commit, PushEvent } from '@octokit/webhooks-types'; import { Minimatch } from 'minimatch'; +import { LoggerService } from '@backstage/backend-plugin-api'; const TOPIC_REPO_PUSH = 'github.push'; @@ -78,7 +78,7 @@ type Repository = { export class GithubEntityProvider implements EntityProvider, EventSubscriber { private readonly config: GithubEntityProviderConfig; private readonly events?: EventsService; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly integration: GithubIntegrationConfig; private readonly scheduleFn: () => Promise; private connection?: EntityProviderConnection; @@ -88,7 +88,7 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber { config: Config, options: { events?: EventsService; - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -132,7 +132,7 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber { private constructor( config: GithubEntityProviderConfig, integration: GithubIntegration, - logger: Logger, + logger: LoggerService, taskRunner: TaskRunner, events?: EventsService, ) { @@ -187,7 +187,7 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber { }; } - async refresh(logger: Logger) { + async refresh(logger: LoggerService) { if (!this.connection) { throw new Error('Not initialized'); } diff --git a/plugins/catalog-backend-module-github/src/providers/GithubMultiOrgEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GithubMultiOrgEntityProvider.test.ts index 78c12d92cf..0542e64d64 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubMultiOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubMultiOrgEntityProvider.test.ts @@ -19,13 +19,16 @@ import { GroupEntity, UserEntity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { GithubCredentialsProvider } from '@backstage/integration'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; -import { EventSubscriber } from '@backstage/plugin-events-node'; +import { + DefaultEventsService, + EventsService, +} from '@backstage/plugin-events-node'; import { graphql } from '@octokit/graphql'; import { GithubMultiOrgEntityProvider, withLocations, } from './GithubMultiOrgEntityProvider'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; jest.mock('@octokit/graphql'); @@ -43,7 +46,7 @@ describe('GithubMultiOrgEntityProvider', () => { describe('read', () => { let mockClient: jest.Mock; let entityProviderConnection: EntityProviderConnection; - let logger: Logger; + let logger: LoggerService; let gitHubConfig: { host: string }; let mockGetCredentials: jest.Mock; let entityProvider: GithubMultiOrgEntityProvider; @@ -717,15 +720,16 @@ describe('GithubMultiOrgEntityProvider', () => { }); describe('events', () => { - let onEvent: Function; + let events: EventsService; const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), refresh: jest.fn(), }; - beforeEach(() => { + beforeEach(async () => { const logger = getVoidLogger(); + events = DefaultEventsService.create({ logger }); const config = new ConfigReader({ integrations: { github: [ @@ -745,29 +749,22 @@ describe('GithubMultiOrgEntityProvider', () => { getCredentials: mockGetCredentials, }; - const mockEventBroker = { - publish: async () => {}, - subscribe: (subscriber: EventSubscriber) => { - onEvent = subscriber.onEvent; - }, - }; - const entityProvider = GithubMultiOrgEntityProvider.fromConfig(config, { + events, id: 'my-id', githubCredentialsProvider, githubUrl: 'https://github.com', logger, orgs: ['orgA', 'orgB'], - eventBroker: mockEventBroker, }); - entityProvider.connect(entityProviderConnection); + await entityProvider.connect(entityProviderConnection); }); afterEach(() => jest.resetAllMocks()); it('should ignore events from non-applicable orgs', async () => { - await onEvent({ + await events.publish({ topic: 'github.organization', eventPayload: { action: 'member_added', @@ -787,7 +784,7 @@ describe('GithubMultiOrgEntityProvider', () => { expect(entityProviderConnection.applyMutation).not.toHaveBeenCalled(); - await onEvent({ + await events.publish({ topic: 'github.installation', eventPayload: { action: 'created', @@ -901,7 +898,7 @@ describe('GithubMultiOrgEntityProvider', () => { (graphql.defaults as jest.Mock).mockReturnValue(mockClient); - await onEvent({ + await events.publish({ topic: 'github.installation', eventPayload: { action: 'created', @@ -1033,7 +1030,7 @@ describe('GithubMultiOrgEntityProvider', () => { (graphql.defaults as jest.Mock).mockReturnValue(mockClient); - await onEvent({ + await events.publish({ topic: 'github.organization', eventPayload: { action: 'member_added', @@ -1103,7 +1100,7 @@ describe('GithubMultiOrgEntityProvider', () => { (graphql.defaults as jest.Mock).mockReturnValue(mockClient); - await onEvent({ + await events.publish({ topic: 'github.organization', eventPayload: { action: 'member_removed', @@ -1198,7 +1195,7 @@ describe('GithubMultiOrgEntityProvider', () => { (graphql.defaults as jest.Mock).mockReturnValue(mockClient); - await onEvent({ + await events.publish({ topic: 'github.organization', eventPayload: { action: 'member_removed', @@ -1253,7 +1250,7 @@ describe('GithubMultiOrgEntityProvider', () => { describe('team', () => { it('should create a new group from a new team', async () => { - await onEvent({ + await events.publish({ topic: 'github.team', eventPayload: { action: 'created', @@ -1312,7 +1309,7 @@ describe('GithubMultiOrgEntityProvider', () => { }); it('should remove a group from a deleted team', async () => { - await onEvent({ + await events.publish({ topic: 'github.team', eventPayload: { action: 'deleted', @@ -1467,7 +1464,7 @@ describe('GithubMultiOrgEntityProvider', () => { (graphql.defaults as jest.Mock).mockReturnValue(mockClient); - await onEvent({ + await events.publish({ topic: 'github.team', eventPayload: { action: 'edited', @@ -1676,7 +1673,7 @@ describe('GithubMultiOrgEntityProvider', () => { (graphql.defaults as jest.Mock).mockReturnValue(mockClient); - await onEvent({ + await events.publish({ topic: 'github.membership', eventPayload: { action: 'added', @@ -1848,7 +1845,7 @@ describe('GithubMultiOrgEntityProvider', () => { (graphql.defaults as jest.Mock).mockReturnValue(mockClient); - await onEvent({ + await events.publish({ topic: 'github.membership', eventPayload: { action: 'removed', diff --git a/plugins/catalog-backend-module-github/src/providers/GithubMultiOrgEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GithubMultiOrgEntityProvider.ts index edbbcc4c2c..f07d033ecd 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubMultiOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubMultiOrgEntityProvider.ts @@ -38,19 +38,15 @@ import { EntityProvider, EntityProviderConnection, } from '@backstage/plugin-catalog-node'; -import { - EventBroker, - EventParams, - EventsService, -} from '@backstage/plugin-events-node'; +import { EventParams, EventsService } from '@backstage/plugin-events-node'; import { graphql } from '@octokit/graphql'; import { InstallationCreatedEvent, InstallationEvent, + MembershipEvent, OrganizationEvent, OrganizationMemberAddedEvent, OrganizationMemberRemovedEvent, - MembershipEvent, TeamCreatedEvent, TeamDeletedEvent, TeamEditedEvent, @@ -58,7 +54,6 @@ import { } from '@octokit/webhooks-types'; import { merge } from 'lodash'; import * as uuid from 'uuid'; -import { Logger } from 'winston'; import { assignGroupsToUsers, @@ -83,6 +78,7 @@ import { } from '../lib/github'; import { splitTeamSlug } from '../lib/util'; import { areGroupEntities, areUserEntities } from '../lib/guards'; +import { LoggerService } from '@backstage/backend-plugin-api'; const EVENT_TOPICS = [ 'github.installation', @@ -140,7 +136,7 @@ export interface GithubMultiOrgEntityProviderOptions { /** * The logger to use. */ - logger: Logger; + logger: LoggerService; /** * Optionally supply a custom credentials provider, replacing the default one. @@ -157,13 +153,6 @@ export interface GithubMultiOrgEntityProviderOptions { * By default, groups will be namespaced according to their GitHub org. */ teamTransformer?: TeamTransformer; - - /** - * An EventBroker to subscribe this provider to GitHub events to trigger delta mutations - * - * @deprecated Use `events` instead. - */ - eventBroker?: EventBroker; } type CreateDeltaOperation = (entities: Entity[]) => { @@ -213,13 +202,6 @@ export class GithubMultiOrgEntityProvider implements EntityProvider { provider.schedule(options.schedule); - if (options.eventBroker) { - options.eventBroker.subscribe({ - supportsEventTopics: provider.supportsEventTopics.bind(provider), - onEvent: provider.onEvent.bind(provider), - }); - } - return provider; } @@ -230,7 +212,7 @@ export class GithubMultiOrgEntityProvider implements EntityProvider { gitHubConfig: GithubIntegrationConfig; githubCredentialsProvider: GithubCredentialsProvider; githubUrl: string; - logger: Logger; + logger: LoggerService; orgs?: string[]; userTransformer?: UserTransformer; teamTransformer?: TeamTransformer; @@ -257,7 +239,7 @@ export class GithubMultiOrgEntityProvider implements EntityProvider { * Runs one single complete ingestion. This is only necessary if you use * manual scheduling. */ - async read(options?: { logger?: Logger }) { + async read(options?: { logger?: LoggerService }) { if (!this.connection) { throw new Error('Not initialized'); } @@ -336,10 +318,6 @@ export class GithubMultiOrgEntityProvider implements EntityProvider { markCommitComplete(); } - private supportsEventTopics(): string[] { - return EVENT_TOPICS; - } - private async onEvent(params: EventParams): Promise { const { logger } = this.options; logger.debug(`Received event from ${params.topic}`); @@ -925,7 +903,7 @@ export class GithubMultiOrgEntityProvider implements EntityProvider { } // Helps wrap the timing and logging behaviors -function trackProgress(logger: Logger) { +function trackProgress(logger: LoggerService) { let timestamp = Date.now(); let summary: string; diff --git a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts index 486ff47f1c..dade7d7983 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts @@ -22,7 +22,10 @@ import { } from '@backstage/integration'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; -import { EventParams } from '@backstage/plugin-events-node'; +import { + DefaultEventsService, + EventParams, +} from '@backstage/plugin-events-node'; import { GithubOrgEntityProvider } from './GithubOrgEntityProvider'; import { withLocations } from '../lib/withLocations'; @@ -267,6 +270,7 @@ describe('GithubOrgEntityProvider', () => { }; const logger = getVoidLogger(); + const events = DefaultEventsService.create({ logger }); const gitHubConfig: GithubIntegrationConfig = { host: 'github.com', }; @@ -281,6 +285,7 @@ describe('GithubOrgEntityProvider', () => { }; const entityProvider = new GithubOrgEntityProvider({ + events, id: 'my-id', githubCredentialsProvider, orgUrl: 'https://github.com/backstage', @@ -288,7 +293,7 @@ describe('GithubOrgEntityProvider', () => { logger, }); - entityProvider.connect(entityProviderConnection); + await entityProvider.connect(entityProviderConnection); const expectedEntity = { apiVersion: 'backstage.io/v1alpha1', @@ -330,8 +335,7 @@ describe('GithubOrgEntityProvider', () => { }, }, }; - - await entityProvider.onEvent(event); + await events.publish(event); expect(entityProviderConnection.applyMutation).toHaveBeenCalledTimes(1); expect(entityProviderConnection.applyMutation).toHaveBeenCalledWith({ @@ -353,6 +357,7 @@ describe('GithubOrgEntityProvider', () => { }; const logger = getVoidLogger(); + const events = DefaultEventsService.create({ logger }); const gitHubConfig: GithubIntegrationConfig = { host: 'github.com', }; @@ -367,6 +372,7 @@ describe('GithubOrgEntityProvider', () => { }; const entityProvider = new GithubOrgEntityProvider({ + events, id: 'my-id', githubCredentialsProvider, orgUrl: 'https://github.com/backstage', @@ -374,7 +380,7 @@ describe('GithubOrgEntityProvider', () => { logger, }); - entityProvider.connect(entityProviderConnection); + await entityProvider.connect(entityProviderConnection); const expectedEntity = { apiVersion: 'backstage.io/v1alpha1', @@ -416,8 +422,7 @@ describe('GithubOrgEntityProvider', () => { }, }, }; - - await entityProvider.onEvent(event); + await events.publish(event); expect(entityProviderConnection.applyMutation).toHaveBeenCalledTimes(1); expect(entityProviderConnection.applyMutation).toHaveBeenCalledWith({ @@ -439,6 +444,7 @@ describe('GithubOrgEntityProvider', () => { }; const logger = getVoidLogger(); + const events = DefaultEventsService.create({ logger }); const gitHubConfig: GithubIntegrationConfig = { host: 'github.com', }; @@ -453,6 +459,7 @@ describe('GithubOrgEntityProvider', () => { }; const entityProvider = new GithubOrgEntityProvider({ + events, id: 'my-id', githubCredentialsProvider, orgUrl: 'https://github.com/backstage', @@ -508,7 +515,7 @@ describe('GithubOrgEntityProvider', () => { }, }; - await entityProvider.onEvent(event); + await events.publish(event); expect(entityProviderConnection.applyMutation).toHaveBeenCalledTimes(1); expect(entityProviderConnection.applyMutation).toHaveBeenCalledWith({ @@ -530,6 +537,7 @@ describe('GithubOrgEntityProvider', () => { }; const logger = getVoidLogger(); + const events = DefaultEventsService.create({ logger }); const gitHubConfig: GithubIntegrationConfig = { host: 'github.com', }; @@ -544,6 +552,7 @@ describe('GithubOrgEntityProvider', () => { }; const entityProvider = new GithubOrgEntityProvider({ + events, id: 'my-id', githubCredentialsProvider, orgUrl: 'https://github.com/backstage', @@ -551,7 +560,7 @@ describe('GithubOrgEntityProvider', () => { logger, }); - entityProvider.connect(entityProviderConnection); + await entityProvider.connect(entityProviderConnection); const expectedEntity = { apiVersion: 'backstage.io/v1alpha1', @@ -600,7 +609,7 @@ describe('GithubOrgEntityProvider', () => { }, }; - await entityProvider.onEvent(event); + await events.publish(event); expect(entityProviderConnection.applyMutation).toHaveBeenCalledTimes(1); expect(entityProviderConnection.applyMutation).toHaveBeenCalledWith({ @@ -622,6 +631,7 @@ describe('GithubOrgEntityProvider', () => { }; const logger = getVoidLogger(); + const events = DefaultEventsService.create({ logger }); const gitHubConfig: GithubIntegrationConfig = { host: 'github.com', }; @@ -636,6 +646,7 @@ describe('GithubOrgEntityProvider', () => { }; const entityProvider = new GithubOrgEntityProvider({ + events, id: 'my-id', githubCredentialsProvider, orgUrl: 'https://github.com/backstage', @@ -717,7 +728,7 @@ describe('GithubOrgEntityProvider', () => { (graphql.defaults as jest.Mock).mockReturnValue(mockClient); - entityProvider.connect(entityProviderConnection); + await entityProvider.connect(entityProviderConnection); const event: EventParams = { topic: 'github.team', @@ -744,7 +755,7 @@ describe('GithubOrgEntityProvider', () => { }, }; - await entityProvider.onEvent(event); + await events.publish(event); await new Promise(process.nextTick); expect(entityProviderConnection.applyMutation).toHaveBeenCalledTimes(1); @@ -871,6 +882,7 @@ describe('GithubOrgEntityProvider', () => { }; const logger = getVoidLogger(); + const events = DefaultEventsService.create({ logger }); const gitHubConfig: GithubIntegrationConfig = { host: 'github.com', }; @@ -885,6 +897,7 @@ describe('GithubOrgEntityProvider', () => { }; const entityProvider = new GithubOrgEntityProvider({ + events, id: 'my-id', githubCredentialsProvider, orgUrl: 'https://github.com/backstage', @@ -965,7 +978,7 @@ describe('GithubOrgEntityProvider', () => { }); (graphql.defaults as jest.Mock).mockReturnValue(mockClient); - entityProvider.connect(entityProviderConnection); + await entityProvider.connect(entityProviderConnection); const event: EventParams = { topic: 'github.membership', @@ -989,7 +1002,7 @@ describe('GithubOrgEntityProvider', () => { }, }; - await entityProvider.onEvent(event); + await events.publish(event); await new Promise(process.nextTick); expect(entityProviderConnection.applyMutation).toHaveBeenCalledTimes(1); @@ -1117,6 +1130,7 @@ describe('GithubOrgEntityProvider', () => { }; const logger = getVoidLogger(); + const events = DefaultEventsService.create({ logger }); const gitHubConfig: GithubIntegrationConfig = { host: 'github.com', }; @@ -1131,6 +1145,7 @@ describe('GithubOrgEntityProvider', () => { }; const entityProvider = new GithubOrgEntityProvider({ + events, id: 'my-id', githubCredentialsProvider, orgUrl: 'https://github.com/backstage', @@ -1187,7 +1202,7 @@ describe('GithubOrgEntityProvider', () => { }); (graphql.defaults as jest.Mock).mockReturnValue(mockClient); - entityProvider.connect(entityProviderConnection); + await entityProvider.connect(entityProviderConnection); const event: EventParams = { topic: 'github.membership', @@ -1211,7 +1226,7 @@ describe('GithubOrgEntityProvider', () => { }, }; - await entityProvider.onEvent(event); + await events.publish(event); await new Promise(process.nextTick); expect(entityProviderConnection.applyMutation).toHaveBeenCalledTimes(1); diff --git a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts index b7fc341694..ba7602f962 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts @@ -28,11 +28,7 @@ import { EntityProvider, EntityProviderConnection, } from '@backstage/plugin-catalog-node'; -import { - EventParams, - EventsService, - EventSubscriber, -} from '@backstage/plugin-events-node'; +import { EventParams, EventsService } from '@backstage/plugin-events-node'; import { graphql } from '@octokit/graphql'; import { MembershipEvent, @@ -43,28 +39,28 @@ import { TeamEvent, } from '@octokit/webhooks-types'; import * as uuid from 'uuid'; -import { Logger } from 'winston'; import { - TeamTransformer, - UserTransformer, defaultOrganizationTeamTransformer, defaultUserTransformer, + TeamTransformer, + UserTransformer, } from '../lib/defaultTransformers'; import { - DeferredEntitiesBuilder, - GithubTeam, createAddEntitiesOperation, createRemoveEntitiesOperation, createReplaceEntitiesOperation, + DeferredEntitiesBuilder, getOrganizationTeam, getOrganizationTeams, getOrganizationTeamsFromUsers, getOrganizationUsers, + GithubTeam, } from '../lib/github'; import { assignGroupsToUsers, buildOrgHierarchy } from '../lib/org'; import { parseGithubOrgUrl } from '../lib/util'; import { withLocations } from '../lib/withLocations'; import { areGroupEntities, areUserEntities } from '../lib/guards'; +import { LoggerService } from '@backstage/backend-plugin-api'; const EVENT_TOPICS = [ 'github.membership', @@ -115,7 +111,7 @@ export interface GithubOrgEntityProviderOptions { /** * The logger to use. */ - logger: Logger; + logger: LoggerService; /** * Optionally supply a custom credentials provider, replacing the default one. @@ -138,9 +134,7 @@ export interface GithubOrgEntityProviderOptions { * * @public */ -export class GithubOrgEntityProvider - implements EntityProvider, EventSubscriber -{ +export class GithubOrgEntityProvider implements EntityProvider { private readonly credentialsProvider: GithubCredentialsProvider; private connection?: EntityProviderConnection; private scheduleFn?: () => Promise; @@ -183,7 +177,7 @@ export class GithubOrgEntityProvider id: string; orgUrl: string; gitHubConfig: GithubIntegrationConfig; - logger: Logger; + logger: LoggerService; githubCredentialsProvider?: GithubCredentialsProvider; userTransformer?: UserTransformer; teamTransformer?: TeamTransformer; @@ -214,7 +208,7 @@ export class GithubOrgEntityProvider * Runs one single complete ingestion. This is only necessary if you use * manual scheduling. */ - async read(options?: { logger?: Logger }) { + async read(options?: { logger?: LoggerService }) { if (!this.connection) { throw new Error('Not initialized'); } @@ -268,8 +262,7 @@ export class GithubOrgEntityProvider markCommitComplete(); } - /** {@inheritdoc @backstage/plugin-events-node#EventSubscriber.onEvent} */ - async onEvent(params: EventParams): Promise { + private async onEvent(params: EventParams): Promise { const { logger } = this.options; logger.debug(`Received event from ${params.topic}`); @@ -335,11 +328,6 @@ export class GithubOrgEntityProvider return; } - /** {@inheritdoc @backstage/plugin-events-node#EventSubscriber.supportsEventTopics} */ - supportsEventTopics(): string[] { - return EVENT_TOPICS; - } - private async onTeamEditedInOrganization( event: TeamEditedEvent, createDeltaOperation: DeferredEntitiesBuilder, @@ -618,7 +606,7 @@ export class GithubOrgEntityProvider } // Helps wrap the timing and logging behaviors -function trackProgress(logger: Logger) { +function trackProgress(logger: LoggerService) { let timestamp = Date.now(); let summary: string; diff --git a/plugins/catalog-backend-module-gitlab/api-report.md b/plugins/catalog-backend-module-gitlab/api-report.md index 6c26e28604..cd9ade4bfb 100644 --- a/plugins/catalog-backend-module-gitlab/api-report.md +++ b/plugins/catalog-backend-module-gitlab/api-report.md @@ -11,7 +11,7 @@ import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { GitLabIntegrationConfig } from '@backstage/integration'; import { GroupEntity } from '@backstage/catalog-model'; import { LocationSpec } from '@backstage/plugin-catalog-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { TaskRunner } from '@backstage/backend-tasks'; import { TaskScheduleDefinition } from '@backstage/backend-tasks'; @@ -25,7 +25,7 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -33,7 +33,7 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { // (undocumented) getProviderName(): string; // (undocumented) - refresh(logger: Logger): Promise; + refresh(logger: LoggerService): Promise; } // @public @@ -42,7 +42,7 @@ export class GitLabDiscoveryProcessor implements CatalogProcessor { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; skipReposWithoutExactFileMatch?: boolean; skipForkedRepos?: boolean; }, @@ -80,7 +80,7 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; userTransformer?: UserTransformer; diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 7c20287e2c..6a962fecb6 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -54,8 +54,7 @@ "@backstage/plugin-catalog-node": "workspace:^", "lodash": "^4.17.21", "node-fetch": "^2.6.7", - "uuid": "^9.0.0", - "winston": "^3.2.1" + "uuid": "^9.0.0" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts b/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts index 02b1b1cb51..b8e0cf3669 100644 --- a/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts @@ -30,8 +30,8 @@ import { LocationSpec, processingResult, } from '@backstage/plugin-catalog-node'; -import { Logger } from 'winston'; import { GitLabClient, GitLabProject, paginated } from './lib'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Extracts repositories out of an GitLab instance. @@ -39,7 +39,7 @@ import { GitLabClient, GitLabProject, paginated } from './lib'; */ export class GitLabDiscoveryProcessor implements CatalogProcessor { private readonly integrations: ScmIntegrationRegistry; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly cache: CacheClient; private readonly skipReposWithoutExactFileMatch: boolean; private readonly skipForkedRepos: boolean; @@ -47,7 +47,7 @@ export class GitLabDiscoveryProcessor implements CatalogProcessor { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; skipReposWithoutExactFileMatch?: boolean; skipForkedRepos?: boolean; }, @@ -66,7 +66,7 @@ export class GitLabDiscoveryProcessor implements CatalogProcessor { private constructor(options: { integrations: ScmIntegrationRegistry; pluginCache: PluginCacheManager; - logger: Logger; + logger: LoggerService; skipReposWithoutExactFileMatch?: boolean; skipForkedRepos?: boolean; }) { diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.ts index d69c99c777..cc2b2362cd 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.ts @@ -18,7 +18,7 @@ import { GitLabIntegrationConfig, } from '@backstage/integration'; import fetch from 'node-fetch'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { GitLabDescendantGroupsResponse, @@ -47,9 +47,12 @@ interface UserListOptions extends CommonListOptions { export class GitLabClient { private readonly config: GitLabIntegrationConfig; - private readonly logger: Logger; + private readonly logger: LoggerService; - constructor(options: { config: GitLabIntegrationConfig; logger: Logger }) { + constructor(options: { + config: GitLabIntegrationConfig; + logger: LoggerService; + }) { this.config = options.config; this.logger = options.logger; } diff --git a/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.ts index 9979d0862e..a1b24e4eea 100644 --- a/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.ts @@ -15,10 +15,9 @@ */ import { - createBackendModule, coreServices, + createBackendModule, } from '@backstage/backend-plugin-api'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { GitlabDiscoveryEntityProvider } from '../providers'; @@ -41,7 +40,7 @@ export const catalogModuleGitlabDiscoveryEntityProvider = createBackendModule({ async init({ config, catalog, logger, scheduler }) { catalog.addEntityProvider( GitlabDiscoveryEntityProvider.fromConfig(config, { - logger: loggerToWinstonLogger(logger), + logger, scheduler, }), ); diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts index 32da64f819..ae8fe4e12c 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts @@ -24,7 +24,6 @@ import { locationSpecToLocationEntity, } from '@backstage/plugin-catalog-node'; import * as uuid from 'uuid'; -import { Logger } from 'winston'; import { GitLabClient, GitLabProject, @@ -32,6 +31,7 @@ import { paginated, readGitlabConfigs, } from '../lib'; +import { LoggerService } from '@backstage/backend-plugin-api'; type Result = { scanned: number; @@ -45,14 +45,14 @@ type Result = { export class GitlabDiscoveryEntityProvider implements EntityProvider { private readonly config: GitlabProviderConfig; private readonly integration: GitLabIntegration; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly scheduleFn: () => Promise; private connection?: EntityProviderConnection; static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, @@ -98,7 +98,7 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { private constructor(options: { config: GitlabProviderConfig; integration: GitLabIntegration; - logger: Logger; + logger: LoggerService; taskRunner: TaskRunner; }) { this.config = options.config; @@ -143,7 +143,7 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { }; } - async refresh(logger: Logger): Promise { + async refresh(logger: LoggerService): Promise { if (!this.connection) { throw new Error( `Gitlab discovery connection not initialized for ${this.getProviderName()}`, diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts index 1157a2f1f3..90a7a14b6b 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts @@ -27,7 +27,7 @@ import { } from '@backstage/plugin-catalog-node'; import { merge } from 'lodash'; import * as uuid from 'uuid'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { GitLabClient, @@ -38,14 +38,14 @@ import { import { GitLabGroup, GitLabUser, + GroupNameTransformer, + GroupTransformer as GroupEntitiesTransformer, PagedResponse, UserTransformer, - GroupTransformer as GroupEntitiesTransformer, - GroupNameTransformer, } from '../lib/types'; import { - defaultGroupNameTransformer, defaultGroupEntitiesTransformer, + defaultGroupNameTransformer, defaultUserTransformer, } from '../lib/defaultTransformers'; @@ -66,7 +66,7 @@ type GroupResult = { export class GitlabOrgDiscoveryEntityProvider implements EntityProvider { private readonly config: GitlabProviderConfig; private readonly integration: GitLabIntegration; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly scheduleFn: () => Promise; private connection?: EntityProviderConnection; private userTransformer: UserTransformer; @@ -76,7 +76,7 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; userTransformer?: UserTransformer; @@ -136,7 +136,7 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider { private constructor(options: { config: GitlabProviderConfig; integration: GitLabIntegration; - logger: Logger; + logger: LoggerService; taskRunner: TaskRunner; userTransformer?: UserTransformer; groupEntitiesTransformer?: GroupEntitiesTransformer; @@ -189,7 +189,7 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider { }; } - private async refresh(logger: Logger): Promise { + private async refresh(logger: LoggerService): Promise { if (!this.connection) { throw new Error( `Gitlab discovery connection not initialized for ${this.getProviderName()}`, diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index 163f2511c7..8eea6b9d92 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -65,8 +65,7 @@ "express-promise-router": "^4.1.0", "knex": "^3.0.0", "luxon": "^3.0.0", - "uuid": "^9.0.0", - "winston": "^3.2.1" + "uuid": "^9.0.0" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/module/WrapperProviders.ts b/plugins/catalog-backend-module-incremental-ingestion/src/module/WrapperProviders.ts index cc2954ea05..b26cfe0baf 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/module/WrapperProviders.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/module/WrapperProviders.ts @@ -15,11 +15,10 @@ */ import { - RootConfigService, LoggerService, + RootConfigService, SchedulerService, } from '@backstage/backend-plugin-api'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { stringifyError } from '@backstage/errors'; import { EntityProvider, @@ -77,7 +76,7 @@ export class WrapperProviders { async adminRouter(): Promise { return await new IncrementalProviderRouter( new IncrementalIngestionDatabaseManager({ client: this.options.client }), - loggerToWinstonLogger(this.options.logger), + this.options.logger, ).createRouter(); } @@ -86,11 +85,9 @@ export class WrapperProviders { providerOptions: IncrementalEntityProviderOptions, connection: EntityProviderConnection, ) { - const logger = loggerToWinstonLogger( - this.options.logger.child({ - entityProvider: provider.getProviderName(), - }), - ); + const logger = this.options.logger.child({ + entityProvider: provider.getProviderName(), + }); try { if (!this.migrate) { diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/router/routes.ts b/plugins/catalog-backend-module-incremental-ingestion/src/router/routes.ts index 4a89467a93..d3ccb8863b 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/router/routes.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/router/routes.ts @@ -17,14 +17,17 @@ import { errorHandler } from '@backstage/backend-common'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager'; +import { LoggerService } from '@backstage/backend-plugin-api'; export class IncrementalProviderRouter { private manager: IncrementalIngestionDatabaseManager; - private logger: Logger; + private logger: LoggerService; - constructor(manager: IncrementalIngestionDatabaseManager, logger: Logger) { + constructor( + manager: IncrementalIngestionDatabaseManager, + logger: LoggerService, + ) { this.manager = manager; this.logger = logger; } diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/types.ts b/plugins/catalog-backend-module-incremental-ingestion/src/types.ts index 68ad2b8b04..78309afb36 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/types.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/types.ts @@ -32,6 +32,7 @@ import type { PermissionEvaluator } from '@backstage/plugin-permission-common'; import type { DurationObjectUnits } from 'luxon'; import type { Logger } from 'winston'; import { IncrementalIngestionDatabaseManager } from './database/IncrementalIngestionDatabaseManager'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Ingest entities into the catalog in bite-sized chunks. @@ -200,7 +201,7 @@ export interface IterationEngine { } export interface IterationEngineOptions { - logger: Logger; + logger: LoggerService; connection: EntityProviderConnection; manager: IncrementalIngestionDatabaseManager; provider: IncrementalEntityProvider; diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index 911564d160..86170e2910 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -10,7 +10,7 @@ import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { GroupEntity } from '@backstage/catalog-model'; import { LocationSpec } from '@backstage/plugin-catalog-common'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import * as MicrosoftGraph from '@microsoft/microsoft-graph-types'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { Response as Response_2 } from 'node-fetch'; @@ -122,7 +122,7 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider { constructor(options: { id: string; provider: MicrosoftGraphProviderConfig; - logger: Logger; + logger: LoggerService; userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; organizationTransformer?: OrganizationTransformer; @@ -136,14 +136,14 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider { ): MicrosoftGraphOrgEntityProvider[]; // (undocumented) getProviderName(): string; - read(options?: { logger?: Logger }): Promise; + read(options?: { logger?: LoggerService }): Promise; } // @public @deprecated export interface MicrosoftGraphOrgEntityProviderLegacyOptions { groupTransformer?: GroupTransformer; id: string; - logger: Logger; + logger: LoggerService; organizationTransformer?: OrganizationTransformer; schedule: 'manual' | TaskRunner; target: string; @@ -154,7 +154,7 @@ export interface MicrosoftGraphOrgEntityProviderLegacyOptions { export type MicrosoftGraphOrgEntityProviderOptions = | MicrosoftGraphOrgEntityProviderLegacyOptions | { - logger: Logger; + logger: LoggerService; schedule?: 'manual' | TaskRunner; scheduler?: PluginTaskScheduler; userTransformer?: UserTransformer | Record; @@ -168,7 +168,7 @@ export type MicrosoftGraphOrgEntityProviderOptions = export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { constructor(options: { providers: MicrosoftGraphProviderConfig[]; - logger: Logger; + logger: LoggerService; userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; organizationTransformer?: OrganizationTransformer; @@ -177,7 +177,7 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; organizationTransformer?: OrganizationTransformer; @@ -257,7 +257,7 @@ export function readMicrosoftGraphOrg( userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; organizationTransformer?: OrganizationTransformer; - logger: Logger; + logger: LoggerService; }, ): Promise<{ users: UserEntity[]; diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 0cf7d84ac7..bab2f78f98 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -63,8 +63,7 @@ "node-fetch": "^2.6.7", "p-limit": "^3.0.2", "qs": "^6.9.4", - "uuid": "^9.0.0", - "winston": "^3.2.1" + "uuid": "^9.0.0" }, "devDependencies": { "@backstage/backend-common": "workspace:^", diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/defaultTransformers.test.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/defaultTransformers.test.ts new file mode 100644 index 0000000000..f123b75995 --- /dev/null +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/defaultTransformers.test.ts @@ -0,0 +1,93 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + defaultOrganizationTransformer, + defaultGroupTransformer, + defaultUserTransformer, +} from './defaultTransformers'; +import * as MicrosoftGraph from '@microsoft/microsoft-graph-types'; + +describe('defaultTransformers', () => { + it('tests defaultOrganizationTransformer', async () => { + const organization: MicrosoftGraph.Organization = { + id: 'foo', + displayName: 'BAR', + }; + const result = await defaultOrganizationTransformer(organization); + expect(result).toEqual({ + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { + annotations: { 'graph.microsoft.com/tenant-id': 'foo' }, + description: 'BAR', + name: 'bar', + }, + spec: { children: [], profile: { displayName: 'BAR' }, type: 'root' }, + }); + }); + + it('tests defaultGroupTransformer', async () => { + const group: MicrosoftGraph.Group = { + id: 'foo', + displayName: 'BAR', + }; + const groupPhoto = 'test_photo'; + const result = await defaultGroupTransformer(group, groupPhoto); + expect(result).toEqual({ + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { + annotations: { 'graph.microsoft.com/group-id': 'foo' }, + name: 'bar', + }, + spec: { + children: [], + profile: { displayName: 'BAR', picture: 'test_photo' }, + type: 'team', + }, + }); + }); + + it('tests defaultUserTransformer', async () => { + const user: MicrosoftGraph.User = { + id: 'foo', + displayName: 'BAR', + mail: 'test@outlook.com', + }; + const userPhoto = 'test_photo'; + const result = await defaultUserTransformer(user, userPhoto); + expect(result).toEqual({ + apiVersion: 'backstage.io/v1alpha1', + kind: 'User', + metadata: { + annotations: { + 'graph.microsoft.com/user-id': 'foo', + 'microsoft.com/email': 'test@outlook.com', + }, + name: 'test_outlook.com', + }, + spec: { + memberOf: [], + profile: { + displayName: 'BAR', + email: 'test@outlook.com', + picture: 'test_photo', + }, + }, + }); + }); +}); diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts index 68fe2280b9..0f3d81c224 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts @@ -20,7 +20,6 @@ import { UserEntity, } from '@backstage/catalog-model'; import limiterFactory from 'p-limit'; -import { Logger } from 'winston'; import { MicrosoftGraphClient } from './client'; import { MICROSOFT_GRAPH_GROUP_ID_ANNOTATION, @@ -39,6 +38,7 @@ import { defaultUserTransformer, } from './defaultTransformers'; import * as MicrosoftGraph from '@microsoft/microsoft-graph-types'; +import { LoggerService } from '@backstage/backend-plugin-api'; const PAGE_SIZE = 999; @@ -51,7 +51,7 @@ export async function readMicrosoftGraphUsers( userSelect?: string[]; loadUserPhotos?: boolean; transformer?: UserTransformer; - logger: Logger; + logger: LoggerService; }, ): Promise<{ users: UserEntity[]; // With all relations empty @@ -89,7 +89,7 @@ export async function readMicrosoftGraphUsersInGroups( userGroupMemberFilter?: string; groupExpand?: string; transformer?: UserTransformer; - logger: Logger; + logger: LoggerService; }, ): Promise<{ users: UserEntity[]; // With all relations empty @@ -381,7 +381,7 @@ export async function readMicrosoftGraphOrg( userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; organizationTransformer?: OrganizationTransformer; - logger: Logger; + logger: LoggerService; }, ): Promise<{ users: UserEntity[]; groups: GroupEntity[] }> { const users: UserEntity[] = []; @@ -435,7 +435,7 @@ export async function readMicrosoftGraphOrg( async function transformUsers( client: MicrosoftGraphClient, users: Iterable | AsyncIterable, - logger: Logger, + logger: LoggerService, loadUserPhotos = true, transformer?: UserTransformer, ) { diff --git a/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.ts b/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.ts index f13081d3c6..193f07889f 100644 --- a/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.ts @@ -19,7 +19,6 @@ import { createBackendModule, createExtensionPoint, } from '@backstage/backend-plugin-api'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { GroupTransformer, @@ -130,7 +129,7 @@ export const catalogModuleMicrosoftGraphOrgEntityProvider = createBackendModule( async init({ catalog, config, logger, scheduler }) { catalog.addEntityProvider( MicrosoftGraphOrgEntityProvider.fromConfig(config, { - logger: loggerToWinstonLogger(logger), + logger, scheduler, userTransformer: userTransformer, groupTransformer: groupTransformer, diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts index 160696e2e7..9c804216e4 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts @@ -27,20 +27,20 @@ import { } from '@backstage/plugin-catalog-node'; import { merge } from 'lodash'; import * as uuid from 'uuid'; -import { Logger } from 'winston'; import { GroupTransformer, - MicrosoftGraphClient, - MicrosoftGraphProviderConfig, MICROSOFT_GRAPH_GROUP_ID_ANNOTATION, MICROSOFT_GRAPH_TENANT_ID_ANNOTATION, MICROSOFT_GRAPH_USER_ID_ANNOTATION, + MicrosoftGraphClient, + MicrosoftGraphProviderConfig, OrganizationTransformer, readMicrosoftGraphConfig, readMicrosoftGraphOrg, UserTransformer, } from '../microsoftGraph'; import { readProviderConfigs } from '../microsoftGraph/config'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Options for {@link MicrosoftGraphOrgEntityProvider}. @@ -53,7 +53,7 @@ export type MicrosoftGraphOrgEntityProviderOptions = /** * The logger to use. */ - logger: Logger; + logger: LoggerService; /** * The refresh schedule to use. @@ -122,7 +122,7 @@ export interface MicrosoftGraphOrgEntityProviderLegacyOptions { /** * The logger to use. */ - logger: Logger; + logger: LoggerService; /** * The refresh schedule to use. @@ -272,7 +272,7 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider { private options: { id: string; provider: MicrosoftGraphProviderConfig; - logger: Logger; + logger: LoggerService; userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; organizationTransformer?: OrganizationTransformer; @@ -294,7 +294,7 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider { * Runs one complete ingestion loop. Call this method regularly at some * appropriate cadence. */ - async read(options?: { logger?: Logger }) { + async read(options?: { logger?: LoggerService }) { if (!this.connection) { throw new Error('Not initialized'); } @@ -364,7 +364,7 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider { } // Helps wrap the timing and logging behaviors -function trackProgress(logger: Logger) { +function trackProgress(logger: LoggerService) { let timestamp = Date.now(); let summary: string; diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts index d9119a3c4d..570959a381 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts @@ -21,7 +21,6 @@ import { processingResult, } from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; -import { Logger } from 'winston'; import { GroupTransformer, MicrosoftGraphClient, @@ -31,6 +30,7 @@ import { readMicrosoftGraphOrg, UserTransformer, } from '../microsoftGraph'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Extracts teams and users out of the Microsoft Graph API. @@ -40,7 +40,7 @@ import { */ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { private readonly providers: MicrosoftGraphProviderConfig[]; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly userTransformer?: UserTransformer; private readonly groupTransformer?: GroupTransformer; private readonly organizationTransformer?: OrganizationTransformer; @@ -48,7 +48,7 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; organizationTransformer?: OrganizationTransformer; @@ -63,7 +63,7 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { constructor(options: { providers: MicrosoftGraphProviderConfig[]; - logger: Logger; + logger: LoggerService; userTransformer?: UserTransformer; groupTransformer?: GroupTransformer; organizationTransformer?: OrganizationTransformer; diff --git a/plugins/catalog-backend-module-puppetdb/api-report.md b/plugins/catalog-backend-module-puppetdb/api-report.md index 16c4ab7fb2..3361313392 100644 --- a/plugins/catalog-backend-module-puppetdb/api-report.md +++ b/plugins/catalog-backend-module-puppetdb/api-report.md @@ -7,7 +7,7 @@ import { Config } from '@backstage/config'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { JsonValue } from '@backstage/types'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { ResourceEntity } from '@backstage/catalog-model'; import { TaskRunner } from '@backstage/backend-tasks'; @@ -29,7 +29,7 @@ export class PuppetDbEntityProvider implements EntityProvider { static fromConfig( config: Config, deps: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; transformer?: ResourceTransformer; @@ -37,7 +37,7 @@ export class PuppetDbEntityProvider implements EntityProvider { ): PuppetDbEntityProvider[]; // (undocumented) getProviderName(): string; - refresh(logger: Logger): Promise; + refresh(logger: LoggerService): Promise; } // @public diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 987ba9c18c..ee894f9e4e 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -62,8 +62,7 @@ "lodash": "^4.17.21", "luxon": "^3.0.0", "node-fetch": "^2.6.7", - "uuid": "^9.0.0", - "winston": "^3.2.1" + "uuid": "^9.0.0" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts b/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts index aad28eb47a..aa524f2409 100644 --- a/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts +++ b/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts @@ -15,10 +15,9 @@ */ import { - createBackendModule, coreServices, + createBackendModule, } from '@backstage/backend-plugin-api'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { PuppetDbEntityProvider } from '../providers/PuppetDbEntityProvider'; @@ -41,7 +40,7 @@ export const catalogModulePuppetDbEntityProvider = createBackendModule({ async init({ catalog, config, logger, scheduler }) { catalog.addEntityProvider( PuppetDbEntityProvider.fromConfig(config, { - logger: loggerToWinstonLogger(logger), + logger, scheduler, }), ); diff --git a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts index 0055e95589..0496cc033b 100644 --- a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts +++ b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts @@ -18,7 +18,6 @@ import { EntityProvider, EntityProviderConnection, } from '@backstage/plugin-catalog-node'; -import { Logger } from 'winston'; import { PuppetDbEntityProviderConfig, readProviderConfigs, @@ -26,7 +25,7 @@ import { import { Config } from '@backstage/config'; import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks'; import * as uuid from 'uuid'; -import { ResourceTransformer, defaultResourceTransformer } from '../puppet'; +import { defaultResourceTransformer, ResourceTransformer } from '../puppet'; import { ANNOTATION_LOCATION, ANNOTATION_ORIGIN_LOCATION, @@ -35,6 +34,7 @@ import { import { merge } from 'lodash'; import { readPuppetNodes } from '../puppet/read'; import { ENDPOINT_NODES } from '../puppet/constants'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Reads nodes from [PuppetDB](https://www.puppet.com/docs/puppet/6/puppetdb_overview.html) @@ -44,7 +44,7 @@ import { ENDPOINT_NODES } from '../puppet/constants'; */ export class PuppetDbEntityProvider implements EntityProvider { private readonly config: PuppetDbEntityProviderConfig; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly scheduleFn: () => Promise; private readonly transformer: ResourceTransformer; private connection?: EntityProviderConnection; @@ -60,7 +60,7 @@ export class PuppetDbEntityProvider implements EntityProvider { static fromConfig( config: Config, deps: { - logger: Logger; + logger: LoggerService; schedule?: TaskRunner; scheduler?: PluginTaskScheduler; transformer?: ResourceTransformer; @@ -96,7 +96,7 @@ export class PuppetDbEntityProvider implements EntityProvider { * Creates an instance of {@link PuppetDbEntityProvider}. * * @param config - Configuration of the provider. - * @param logger - The instance of a {@link Logger}. + * @param logger - The instance of a {@link LoggerService}. * @param taskRunner - The instance of {@link TaskRunner}. * @param transformer - A {@link ResourceTransformer} function. * @@ -104,7 +104,7 @@ export class PuppetDbEntityProvider implements EntityProvider { */ private constructor( config: PuppetDbEntityProviderConfig, - logger: Logger, + logger: LoggerService, taskRunner: TaskRunner, transformer: ResourceTransformer, ) { @@ -163,7 +163,7 @@ export class PuppetDbEntityProvider implements EntityProvider { * * @param logger - The instance of a Logger. */ - async refresh(logger: Logger) { + async refresh(logger: LoggerService) { if (!this.connection) { throw new Error('Not initialized'); } @@ -213,9 +213,9 @@ function withLocations(baseUrl: string, entity: Entity): Entity { /** * Tracks the progress of the PuppetDB read and commit operations. * - * @param logger - The instance of a {@link Logger}. + * @param logger - The instance of a {@link LoggerService}. */ -function trackProgress(logger: Logger) { +function trackProgress(logger: LoggerService) { let timestamp = Date.now(); function markReadComplete(entities: Entity[]) { diff --git a/plugins/catalog-backend-module-puppetdb/src/puppet/read.ts b/plugins/catalog-backend-module-puppetdb/src/puppet/read.ts index ab3e85370a..18a6eb077f 100644 --- a/plugins/catalog-backend-module-puppetdb/src/puppet/read.ts +++ b/plugins/catalog-backend-module-puppetdb/src/puppet/read.ts @@ -21,7 +21,7 @@ import { defaultResourceTransformer } from './transformers'; import fetch from 'node-fetch'; import { ResponseError } from '@backstage/errors'; import { ENDPOINT_FACTSETS } from './constants'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Reads nodes and their facts from PuppetDB. @@ -33,7 +33,7 @@ export async function readPuppetNodes( config: PuppetDbEntityProviderConfig, opts?: { transformer?: ResourceTransformer; - logger?: Logger; + logger?: LoggerService; }, ): Promise { const transformFn = opts?.transformer ?? defaultResourceTransformer; diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 56a2506bd6..27c00257a5 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -44,7 +44,7 @@ import { HttpAuthService } from '@backstage/backend-plugin-api'; import { LocationSpec as LocationSpec_2 } from '@backstage/plugin-catalog-common'; import { locationSpecToLocationEntity as locationSpecToLocationEntity_2 } from '@backstage/plugin-catalog-node'; import { locationSpecToMetadataName as locationSpecToMetadataName_2 } from '@backstage/plugin-catalog-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { Permission } from '@backstage/plugin-permission-common'; import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; import { PermissionRule } from '@backstage/plugin-permission-node'; @@ -192,7 +192,7 @@ export type CatalogCollatorEntityTransformer = // @public (undocumented) export type CatalogEnvironment = { - logger: Logger; + logger: LoggerService; database: PluginDatabaseManager; config: Config; reader: UrlReader; @@ -251,14 +251,14 @@ export type CatalogProcessorResult = CatalogProcessorResult_2; export class CodeOwnersProcessor implements CatalogProcessor_2 { constructor(options: { integrations: ScmIntegrationRegistry; - logger: Logger; + logger: LoggerService; reader: UrlReader; }); // (undocumented) static fromConfig( config: Config, options: { - logger: Logger; + logger: LoggerService; reader: UrlReader; }, ): CodeOwnersProcessor; @@ -467,7 +467,7 @@ export function transformLegacyPolicyToProcessor( // @public (undocumented) export class UrlReaderProcessor implements CatalogProcessor_2 { - constructor(options: { reader: UrlReader; logger: Logger }); + constructor(options: { reader: UrlReader; logger: LoggerService }); // (undocumented) getProcessorName(): string; // (undocumented) diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index b2106511c3..208abd9882 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -85,7 +85,6 @@ "p-limit": "^3.0.2", "prom-client": "^15.0.0", "uuid": "^9.0.0", - "winston": "^3.2.1", "yaml": "^2.0.0", "yn": "^4.0.0", "zod": "^3.22.4" @@ -105,7 +104,8 @@ "luxon": "^3.0.0", "msw": "^1.0.0", "supertest": "^6.1.3", - "wait-for-expect": "^3.0.2" + "wait-for-expect": "^3.0.2", + "winston": "^3.13.0" }, "configSchema": "config.d.ts" } diff --git a/plugins/catalog-backend/src/database/DefaultCatalogDatabase.test.ts b/plugins/catalog-backend/src/database/DefaultCatalogDatabase.test.ts index ebcdc77287..a537168bcf 100644 --- a/plugins/catalog-backend/src/database/DefaultCatalogDatabase.test.ts +++ b/plugins/catalog-backend/src/database/DefaultCatalogDatabase.test.ts @@ -14,22 +14,25 @@ * limitations under the License. */ -import { getVoidLogger } from '@backstage/backend-common'; -import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils'; -import { Logger } from 'winston'; +import { + mockServices, + TestDatabaseId, + TestDatabases, +} from '@backstage/backend-test-utils'; import { DefaultCatalogDatabase } from './DefaultCatalogDatabase'; import { applyDatabaseMigrations } from './migrations'; import { DbRefreshStateReferencesRow, DbRefreshStateRow } from './tables'; +import { LoggerService } from '@backstage/backend-plugin-api'; jest.setTimeout(60_000); describe('DefaultCatalogDatabase', () => { - const defaultLogger = getVoidLogger(); + const defaultLogger = mockServices.logger.mock(); const databases = TestDatabases.create(); async function createDatabase( databaseId: TestDatabaseId, - logger: Logger = defaultLogger, + logger: LoggerService = defaultLogger, ) { const knex = await databases.init(databaseId); await applyDatabaseMigrations(knex); diff --git a/plugins/catalog-backend/src/database/DefaultCatalogDatabase.ts b/plugins/catalog-backend/src/database/DefaultCatalogDatabase.ts index 98b100c91e..354391ce15 100644 --- a/plugins/catalog-backend/src/database/DefaultCatalogDatabase.ts +++ b/plugins/catalog-backend/src/database/DefaultCatalogDatabase.ts @@ -16,16 +16,16 @@ import { NotFoundError } from '@backstage/errors'; import { Knex } from 'knex'; -import type { Logger } from 'winston'; import { CatalogDatabase, ListAncestorsOptions, ListAncestorsResult, RefreshOptions, + Transaction, } from './types'; import { DbRefreshStateReferencesRow, DbRefreshStateRow } from './tables'; import { rethrowError } from './conversion'; -import { Transaction } from './types'; +import { LoggerService } from '@backstage/backend-plugin-api'; const MAX_ANCESTOR_DEPTH = 32; @@ -33,7 +33,7 @@ export class DefaultCatalogDatabase implements CatalogDatabase { constructor( private readonly options: { database: Knex; - logger: Logger; + logger: LoggerService; }, ) {} diff --git a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.test.ts b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.test.ts index 71095adefc..9110dca640 100644 --- a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.test.ts +++ b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.test.ts @@ -14,8 +14,11 @@ * limitations under the License. */ -import { getVoidLogger } from '@backstage/backend-common'; -import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils'; +import { + mockServices, + TestDatabaseId, + TestDatabases, +} from '@backstage/backend-test-utils'; import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { Knex } from 'knex'; import * as uuid from 'uuid'; @@ -32,16 +35,17 @@ import { import { createRandomProcessingInterval } from '../processing'; import { timestampToDateTime } from './conversion'; import { generateStableHash } from './util'; +import { LoggerService } from '@backstage/backend-plugin-api'; jest.setTimeout(60_000); describe('DefaultProcessingDatabase', () => { - const defaultLogger = getVoidLogger(); + const defaultLogger = mockServices.logger.mock(); const databases = TestDatabases.create(); async function createDatabase( databaseId: TestDatabaseId, - logger: Logger = defaultLogger, + logger: LoggerService = defaultLogger, ) { const knex = await databases.init(databaseId); await applyDatabaseMigrations(knex); diff --git a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts index 6eea03e0d9..3eb6b5e8ce 100644 --- a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts +++ b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts @@ -19,7 +19,6 @@ import { ConflictError } from '@backstage/errors'; import { DeferredEntity } from '@backstage/plugin-catalog-node'; import { Knex } from 'knex'; import lodash from 'lodash'; -import type { Logger } from 'winston'; import { ProcessingIntervalFunction } from '../processing'; import { rethrowError, timestampToDateTime } from './conversion'; import { initDatabaseMetrics } from './metrics'; @@ -47,6 +46,7 @@ import { EventBroker, EventParams } from '@backstage/plugin-events-node'; import { DateTime } from 'luxon'; import { CATALOG_CONFLICTS_TOPIC } from '../constants'; import { CatalogConflictEventPayload } from '../catalog/types'; +import { LoggerService } from '@backstage/backend-plugin-api'; // The number of items that are sent per batch to the database layer, when // doing .batchInsert calls to knex. This needs to be low enough to not cause @@ -58,7 +58,7 @@ export class DefaultProcessingDatabase implements ProcessingDatabase { constructor( private readonly options: { database: Knex; - logger: Logger; + logger: LoggerService; refreshInterval: ProcessingIntervalFunction; eventBroker?: EventBroker; }, diff --git a/plugins/catalog-backend/src/database/DefaultProviderDatabase.test.ts b/plugins/catalog-backend/src/database/DefaultProviderDatabase.test.ts index 0d124b6d33..0218d25a18 100644 --- a/plugins/catalog-backend/src/database/DefaultProviderDatabase.test.ts +++ b/plugins/catalog-backend/src/database/DefaultProviderDatabase.test.ts @@ -14,25 +14,28 @@ * limitations under the License. */ -import { getVoidLogger } from '@backstage/backend-common'; -import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils'; +import { + mockServices, + TestDatabaseId, + TestDatabases, +} from '@backstage/backend-test-utils'; import { Entity } from '@backstage/catalog-model'; import { Knex } from 'knex'; import * as uuid from 'uuid'; -import { Logger } from 'winston'; import { DefaultProviderDatabase } from './DefaultProviderDatabase'; import { applyDatabaseMigrations } from './migrations'; import { DbRefreshStateReferencesRow, DbRefreshStateRow } from './tables'; +import { LoggerService } from '@backstage/backend-plugin-api'; jest.setTimeout(60_000); describe('DefaultProviderDatabase', () => { - const defaultLogger = getVoidLogger(); + const defaultLogger = mockServices.logger.mock(); const databases = TestDatabases.create(); async function createDatabase( databaseId: TestDatabaseId, - logger: Logger = defaultLogger, + logger: LoggerService = defaultLogger, ) { const knex = await databases.init(databaseId); await applyDatabaseMigrations(knex); diff --git a/plugins/catalog-backend/src/database/DefaultProviderDatabase.ts b/plugins/catalog-backend/src/database/DefaultProviderDatabase.ts index 2a97d1f2a9..5b016438e3 100644 --- a/plugins/catalog-backend/src/database/DefaultProviderDatabase.ts +++ b/plugins/catalog-backend/src/database/DefaultProviderDatabase.ts @@ -20,7 +20,6 @@ import { DeferredEntity } from '@backstage/plugin-catalog-node'; import { Knex } from 'knex'; import lodash from 'lodash'; import { v4 as uuid } from 'uuid'; -import type { Logger } from 'winston'; import { rethrowError } from './conversion'; import { deleteWithEagerPruningOfChildren } from './operations/provider/deleteWithEagerPruningOfChildren'; import { refreshByRefreshKeys } from './operations/provider/refreshByRefreshKeys'; @@ -35,6 +34,7 @@ import { Transaction, } from './types'; import { generateStableHash } from './util'; +import { LoggerService } from '@backstage/backend-plugin-api'; // The number of items that are sent per batch to the database layer, when // doing .batchInsert calls to knex. This needs to be low enough to not cause @@ -46,7 +46,7 @@ export class DefaultProviderDatabase implements ProviderDatabase { constructor( private readonly options: { database: Knex; - logger: Logger; + logger: LoggerService; }, ) {} diff --git a/plugins/catalog-backend/src/database/operations/refreshState/insertUnprocessedEntity.ts b/plugins/catalog-backend/src/database/operations/refreshState/insertUnprocessedEntity.ts index 8e1c6edc87..d6309c27fc 100644 --- a/plugins/catalog-backend/src/database/operations/refreshState/insertUnprocessedEntity.ts +++ b/plugins/catalog-backend/src/database/operations/refreshState/insertUnprocessedEntity.ts @@ -18,8 +18,8 @@ import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { Knex } from 'knex'; import { DbRefreshStateRow } from '../../tables'; import { v4 as uuid } from 'uuid'; -import type { Logger } from 'winston'; import { isDatabaseConflictError } from '@backstage/backend-common'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Attempts to insert a new refresh state row for the given entity, returning @@ -30,7 +30,7 @@ export async function insertUnprocessedEntity(options: { entity: Entity; hash: string; locationKey?: string; - logger: Logger; + logger: LoggerService; }): Promise { const { tx, entity, hash, logger, locationKey } = options; diff --git a/plugins/catalog-backend/src/database/operations/stitcher/performStitching.ts b/plugins/catalog-backend/src/database/operations/stitcher/performStitching.ts index e4388813e8..bf9a1307bd 100644 --- a/plugins/catalog-backend/src/database/operations/stitcher/performStitching.ts +++ b/plugins/catalog-backend/src/database/operations/stitcher/performStitching.ts @@ -24,7 +24,6 @@ import { AlphaEntity, EntityStatusItem } from '@backstage/catalog-model/alpha'; import { SerializedError } from '@backstage/errors'; import { Knex } from 'knex'; import { v4 as uuid } from 'uuid'; -import { Logger } from 'winston'; import { StitchingStrategy } from '../../../stitching/types'; import { DbFinalEntitiesRow, @@ -34,6 +33,7 @@ import { import { buildEntitySearch } from './buildEntitySearch'; import { markDeferredStitchCompleted } from './markDeferredStitchCompleted'; import { BATCH_SIZE, generateStableHash } from './util'; +import { LoggerService } from '@backstage/backend-plugin-api'; // See https://github.com/facebook/react/blob/f0cf832e1d0c8544c36aa8b310960885a11a847c/packages/react-dom-bindings/src/shared/sanitizeURL.js const scriptProtocolPattern = @@ -47,7 +47,7 @@ const scriptProtocolPattern = */ export async function performStitching(options: { knex: Knex | Knex.Transaction; - logger: Logger; + logger: LoggerService; strategy: StitchingStrategy; entityRef: string; stitchTicket?: string; diff --git a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts index ad752b770d..61d319bf37 100644 --- a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { Logger } from 'winston'; import parseGitUrl from 'git-url-parse'; import { Entity } from '@backstage/catalog-model'; import { ScmIntegrationRegistry } from '@backstage/integration'; @@ -24,14 +23,15 @@ import { AnalyzeLocationResponse, } from '@backstage/plugin-catalog-common'; import { ScmLocationAnalyzer } from '@backstage/plugin-catalog-node'; +import { LoggerService } from '@backstage/backend-plugin-api'; export class RepoLocationAnalyzer implements LocationAnalyzer { - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly scmIntegrations: ScmIntegrationRegistry; private readonly analyzers: ScmLocationAnalyzer[]; constructor( - logger: Logger, + logger: LoggerService, scmIntegrations: ScmIntegrationRegistry, analyzers: ScmLocationAnalyzer[], ) { diff --git a/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.ts b/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.ts index 186b732271..b4ed33d162 100644 --- a/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.ts +++ b/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.ts @@ -21,10 +21,10 @@ import { ScmIntegrationRegistry, ScmIntegrations, } from '@backstage/integration'; -import { Logger } from 'winston'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { CatalogProcessor } from '@backstage/plugin-catalog-node'; import { findCodeOwnerByTarget } from './lib'; +import { LoggerService } from '@backstage/backend-plugin-api'; const ALLOWED_KINDS = ['API', 'Component', 'Domain', 'Resource', 'System']; const ALLOWED_LOCATION_TYPES = ['url']; @@ -32,12 +32,12 @@ const ALLOWED_LOCATION_TYPES = ['url']; /** @public */ export class CodeOwnersProcessor implements CatalogProcessor { private readonly integrations: ScmIntegrationRegistry; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly reader: UrlReader; static fromConfig( config: Config, - options: { logger: Logger; reader: UrlReader }, + options: { logger: LoggerService; reader: UrlReader }, ) { const integrations = ScmIntegrations.fromConfig(config); @@ -49,7 +49,7 @@ export class CodeOwnersProcessor implements CatalogProcessor { constructor(options: { integrations: ScmIntegrationRegistry; - logger: Logger; + logger: LoggerService; reader: UrlReader; }) { this.integrations = options.integrations; diff --git a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts index 118cf83064..89f9e74685 100644 --- a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts @@ -18,7 +18,6 @@ import { UrlReader } from '@backstage/backend-common'; import { Entity } from '@backstage/catalog-model'; import { assertError } from '@backstage/errors'; import limiterFactory from 'p-limit'; -import { Logger } from 'winston'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import parseGitUrl from 'git-url-parse'; import { @@ -30,6 +29,7 @@ import { CatalogProcessorResult, processingResult, } from '@backstage/plugin-catalog-node'; +import { LoggerService } from '@backstage/backend-plugin-api'; const CACHE_KEY = 'v1'; @@ -48,7 +48,7 @@ export class UrlReaderProcessor implements CatalogProcessor { constructor( private readonly options: { reader: UrlReader; - logger: Logger; + logger: LoggerService; }, ) {} diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts index 81c31cc1c7..46130a5123 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts @@ -23,7 +23,6 @@ import { assertError, serializeError, stringifyError } from '@backstage/errors'; import { Hash } from 'crypto'; import stableStringify from 'fast-json-stable-stringify'; import { Knex } from 'knex'; -import { Logger } from 'winston'; import { metrics, trace } from '@opentelemetry/api'; import { ProcessingDatabase, RefreshStateItem } from '../database/types'; import { createCounterMetric, createSummaryMetric } from '../util/metrics'; @@ -40,6 +39,7 @@ import { import { deleteOrphanedEntities } from '../database/operations/util/deleteOrphanedEntities'; import { EventBroker } from '@backstage/plugin-events-node'; import { CATALOG_ERRORS_TOPIC } from '../constants'; +import { LoggerService } from '@backstage/backend-plugin-api'; const CACHE_TTL = 5; @@ -56,7 +56,7 @@ export type ProgressTracker = ReturnType; export class DefaultCatalogProcessingEngine { private readonly config: Config; private readonly scheduler?: PluginTaskScheduler; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly knex: Knex; private readonly processingDatabase: ProcessingDatabase; private readonly orchestrator: CatalogProcessingOrchestrator; @@ -76,7 +76,7 @@ export class DefaultCatalogProcessingEngine { constructor(options: { config: Config; scheduler?: PluginTaskScheduler; - logger: Logger; + logger: LoggerService; knex: Knex; processingDatabase: ProcessingDatabase; orchestrator: CatalogProcessingOrchestrator; @@ -437,7 +437,7 @@ function progressTracker() { }, ); - function processStart(item: RefreshStateItem, logger: Logger) { + function processStart(item: RefreshStateItem, logger: LoggerService) { const startTime = process.hrtime(); const endOverallTimer = promProcessingDuration.startTimer(); const endProcessorsTimer = promProcessorsDuration.startTimer(); diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts index c5eaacbc68..5456371e15 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts @@ -32,7 +32,6 @@ import { import { JsonValue } from '@backstage/types'; import { ScmIntegrationRegistry } from '@backstage/integration'; import path from 'path'; -import { Logger } from 'winston'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { CatalogProcessor, @@ -49,10 +48,10 @@ import { getEntityLocationRef, getEntityOriginLocationRef, isLocationEntity, + isObject, toAbsoluteUrl, validateEntity, validateEntityEnvelope, - isObject, } from './util'; import { CatalogRulesEnforcer } from '../ingestion/CatalogRules'; import { ProcessorCacheManager } from './ProcessorCacheManager'; @@ -61,6 +60,7 @@ import { TRACER_ID, withActiveSpan, } from '../util/opentelemetry'; +import { LoggerService } from '@backstage/backend-plugin-api'; const tracer = trace.getTracer(TRACER_ID); @@ -92,7 +92,7 @@ export class DefaultCatalogProcessingOrchestrator private readonly options: { processors: CatalogProcessor[]; integrations: ScmIntegrationRegistry; - logger: Logger; + logger: LoggerService; parser: CatalogProcessorParser; policy: EntityPolicy; rulesEnforcer: CatalogRulesEnforcer; diff --git a/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts b/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts index 0ee6191284..eb8cbcc81a 100644 --- a/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts +++ b/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts @@ -15,14 +15,13 @@ */ import { - Entity, ANNOTATION_LOCATION, ANNOTATION_ORIGIN_LOCATION, - stringifyLocationRef, + Entity, stringifyEntityRef, + stringifyLocationRef, } from '@backstage/catalog-model'; import { assertError } from '@backstage/errors'; -import { Logger } from 'winston'; import { CatalogProcessor, CatalogProcessorResult, @@ -36,6 +35,7 @@ import { validateEntityEnvelope, } from './util'; import { RefreshKeyData } from './types'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Helper class for aggregating all of the emitted data from processors. @@ -48,7 +48,7 @@ export class ProcessorOutputCollector { private done = false; constructor( - private readonly logger: Logger, + private readonly logger: LoggerService, private readonly parentEntity: Entity, ) {} @@ -75,7 +75,7 @@ export class ProcessorOutputCollector { }; } - private receive(logger: Logger, i: CatalogProcessorResult) { + private receive(logger: LoggerService, i: CatalogProcessorResult) { if (this.done) { logger.warn( `Item of type "${ diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index 6faee1ebaf..2438dc9009 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -15,10 +15,10 @@ */ import { - PluginDatabaseManager, - HostDiscovery, - UrlReader, createLegacyAuthAdapters, + HostDiscovery, + PluginDatabaseManager, + UrlReader, } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { @@ -65,7 +65,11 @@ import { } from '../modules/core/PlaceholderProcessor'; import { defaultEntityDataParser } from '../modules/util/parse'; import { LocationAnalyzer } from '../ingestion'; -import { CatalogProcessingEngine } from '../processing'; +import { + CatalogProcessingEngine, + createRandomProcessingInterval, + ProcessingIntervalFunction, +} from '../processing'; import { DefaultProcessingDatabase } from '../database/DefaultProcessingDatabase'; import { applyDatabaseMigrations } from '../database/migrations'; import { DefaultCatalogProcessingEngine } from '../processing/DefaultCatalogProcessingEngine'; @@ -73,30 +77,23 @@ import { DefaultLocationService } from './DefaultLocationService'; import { DefaultEntitiesCatalog } from './DefaultEntitiesCatalog'; import { DefaultCatalogProcessingOrchestrator } from '../processing/DefaultCatalogProcessingOrchestrator'; import { DefaultStitcher } from '../stitching/DefaultStitcher'; -import { - createRandomProcessingInterval, - ProcessingIntervalFunction, -} from '../processing'; import { createRouter } from './createRouter'; import { DefaultRefreshService } from './DefaultRefreshService'; import { AuthorizedRefreshService } from './AuthorizedRefreshService'; import { DefaultCatalogRulesEnforcer } from '../ingestion/CatalogRules'; import { Config, readDurationFromConfig } from '@backstage/config'; -import { Logger } from 'winston'; import { connectEntityProviders } from '../processing/connectEntityProviders'; import { Permission, - PermissionRuleParams, -} from '@backstage/plugin-permission-common'; -import { permissionRules as catalogPermissionRules } from '../permissions/rules'; -import { PermissionRule } from '@backstage/plugin-permission-node'; -import { PermissionAuthorizer, + PermissionRuleParams, toPermissionEvaluator, } from '@backstage/plugin-permission-common'; +import { permissionRules as catalogPermissionRules } from '../permissions/rules'; import { createConditionTransformer, createPermissionIntegrationRouter, + PermissionRule, } from '@backstage/plugin-permission-node'; import { AuthorizedEntitiesCatalog } from './AuthorizedEntitiesCatalog'; import { basicEntityFilter } from './request'; @@ -110,9 +107,10 @@ import { DefaultCatalogDatabase } from '../database/DefaultCatalogDatabase'; import { EventBroker } from '@backstage/plugin-events-node'; import { durationToMilliseconds } from '@backstage/types'; import { - DiscoveryService, AuthService, + DiscoveryService, HttpAuthService, + LoggerService, PermissionsService, } from '@backstage/backend-plugin-api'; @@ -127,7 +125,7 @@ export type CatalogPermissionRuleInput< /** @public */ export type CatalogEnvironment = { - logger: Logger; + logger: LoggerService; database: PluginDatabaseManager; config: Config; reader: UrlReader; diff --git a/plugins/catalog-backend/src/service/CatalogPlugin.ts b/plugins/catalog-backend/src/service/CatalogPlugin.ts index 423a9bb9d1..039d9368bf 100644 --- a/plugins/catalog-backend/src/service/CatalogPlugin.ts +++ b/plugins/catalog-backend/src/service/CatalogPlugin.ts @@ -14,20 +14,20 @@ * limitations under the License. */ import { - createBackendPlugin, coreServices, + createBackendPlugin, } from '@backstage/backend-plugin-api'; import { Entity, Validators } from '@backstage/catalog-model'; import { CatalogBuilder, CatalogPermissionRuleInput } from './CatalogBuilder'; import { CatalogAnalysisExtensionPoint, catalogAnalysisExtensionPoint, - CatalogProcessingExtensionPoint, - catalogProcessingExtensionPoint, - CatalogPermissionExtensionPoint, - catalogPermissionExtensionPoint, CatalogModelExtensionPoint, catalogModelExtensionPoint, + CatalogPermissionExtensionPoint, + catalogPermissionExtensionPoint, + CatalogProcessingExtensionPoint, + catalogProcessingExtensionPoint, } from '@backstage/plugin-catalog-node/alpha'; import { CatalogProcessor, @@ -36,7 +36,6 @@ import { PlaceholderResolver, ScmLocationAnalyzer, } from '@backstage/plugin-catalog-node'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { merge } from 'lodash'; import { Permission } from '@backstage/plugin-permission-common'; @@ -221,14 +220,13 @@ export const catalogPlugin = createBackendPlugin({ auth, httpAuth, }) { - const winstonLogger = loggerToWinstonLogger(logger); const builder = await CatalogBuilder.create({ config, reader, permissions, database, scheduler, - logger: winstonLogger, + logger, discovery, auth, httpAuth, diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts index 81982d5617..9049685d38 100644 --- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts +++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts @@ -21,23 +21,22 @@ import { } from '@backstage/catalog-model'; import { InputError, NotFoundError } from '@backstage/errors'; import { Knex } from 'knex'; -import { isEqual, chunk as lodashChunk } from 'lodash'; -import { Logger } from 'winston'; +import { chunk as lodashChunk, isEqual } from 'lodash'; import { z } from 'zod'; import { + Cursor, EntitiesBatchRequest, EntitiesBatchResponse, - Cursor, EntitiesCatalog, EntitiesRequest, EntitiesResponse, EntityAncestryResponse, EntityFacetsRequest, EntityFacetsResponse, + EntityOrder, EntityPagination, QueryEntitiesRequest, QueryEntitiesResponse, - EntityOrder, } from '../catalog/types'; import { DbFinalEntitiesRow, @@ -57,6 +56,7 @@ import { EntitiesSearchFilter, EntityFilter, } from '@backstage/plugin-catalog-node'; +import { LoggerService } from '@backstage/backend-plugin-api'; const defaultSortField: EntityOrder = { field: 'metadata.uid', @@ -190,10 +190,14 @@ function parseFilter( export class DefaultEntitiesCatalog implements EntitiesCatalog { private readonly database: Knex; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly stitcher: Stitcher; - constructor(options: { database: Knex; logger: Logger; stitcher: Stitcher }) { + constructor(options: { + database: Knex; + logger: LoggerService; + stitcher: Stitcher; + }) { this.database = options.database; this.logger = options.logger; this.stitcher = options.stitcher; diff --git a/plugins/catalog-backend/src/service/DefaultRefreshService.test.ts b/plugins/catalog-backend/src/service/DefaultRefreshService.test.ts index 9ca9ae0a5f..a89b21f79f 100644 --- a/plugins/catalog-backend/src/service/DefaultRefreshService.test.ts +++ b/plugins/catalog-backend/src/service/DefaultRefreshService.test.ts @@ -14,17 +14,16 @@ * limitations under the License. */ -import { getVoidLogger } from '@backstage/backend-common'; import { + mockCredentials, + mockServices, TestDatabaseId, TestDatabases, - mockCredentials, } from '@backstage/backend-test-utils'; import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { createHash } from 'crypto'; import { Knex } from 'knex'; import { v4 as uuid } from 'uuid'; -import { Logger } from 'winston'; import { DefaultCatalogDatabase } from '../database/DefaultCatalogDatabase'; import { DefaultProcessingDatabase } from '../database/DefaultProcessingDatabase'; import { applyDatabaseMigrations } from '../database/migrations'; @@ -38,16 +37,17 @@ import { EntityProcessingRequest } from '../processing/types'; import { DefaultRefreshService } from './DefaultRefreshService'; import { ConfigReader } from '@backstage/config'; import { DefaultStitcher } from '../stitching/DefaultStitcher'; +import { LoggerService } from '@backstage/backend-plugin-api'; jest.setTimeout(60_000); describe('DefaultRefreshService', () => { - const defaultLogger = getVoidLogger(); + const defaultLogger = mockServices.logger.mock(); const databases = TestDatabases.create(); async function createDatabase( databaseId: TestDatabaseId, - logger: Logger = defaultLogger, + logger: LoggerService = defaultLogger, ) { const knex = await databases.init(databaseId); await applyDatabaseMigrations(knex); diff --git a/plugins/catalog-backend/src/service/createRouter.ts b/plugins/catalog-backend/src/service/createRouter.ts index 4bfed783a6..508f0bb3d6 100644 --- a/plugins/catalog-backend/src/service/createRouter.ts +++ b/plugins/catalog-backend/src/service/createRouter.ts @@ -25,7 +25,6 @@ import { import { Config } from '@backstage/config'; import { InputError, NotFoundError, serializeError } from '@backstage/errors'; import express from 'express'; -import { Logger } from 'winston'; import yn from 'yn'; import { z } from 'zod'; import { EntitiesCatalog } from '../catalog/types'; @@ -51,7 +50,11 @@ import { import { createOpenApiRouter } from '../schema/openapi.generated'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { parseEntityPaginationParams } from './request/parseEntityPaginationParams'; -import { AuthService, HttpAuthService } from '@backstage/backend-plugin-api'; +import { + AuthService, + HttpAuthService, + LoggerService, +} from '@backstage/backend-plugin-api'; /** * Options used by {@link createRouter}. @@ -65,7 +68,7 @@ export interface RouterOptions { orchestrator?: CatalogProcessingOrchestrator; refreshService?: RefreshService; scheduler?: PluginTaskScheduler; - logger: Logger; + logger: LoggerService; config: Config; permissionIntegrationRouter?: express.Router; auth: AuthService; diff --git a/plugins/catalog-backend/src/service/standaloneServer.ts b/plugins/catalog-backend/src/service/standaloneServer.ts index 995a607ab5..0755ab6301 100644 --- a/plugins/catalog-backend/src/service/standaloneServer.ts +++ b/plugins/catalog-backend/src/service/standaloneServer.ts @@ -17,22 +17,22 @@ import { createServiceBuilder, DatabaseManager, + HostDiscovery, loadBackendConfig, ServerTokenManager, - HostDiscovery, UrlReaders, } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { ServerPermissionClient } from '@backstage/plugin-permission-node'; import { Server } from 'http'; -import { Logger } from 'winston'; import { applyDatabaseMigrations } from '../database/migrations'; import { CatalogBuilder } from './CatalogBuilder'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } // TODO(freben): Migrate to the next catalog when it's in place diff --git a/plugins/catalog-backend/src/stitching/DefaultStitcher.ts b/plugins/catalog-backend/src/stitching/DefaultStitcher.ts index 990c5efd3b..14b3eca0d4 100644 --- a/plugins/catalog-backend/src/stitching/DefaultStitcher.ts +++ b/plugins/catalog-backend/src/stitching/DefaultStitcher.ts @@ -19,7 +19,6 @@ import { durationToMilliseconds, HumanDuration } from '@backstage/types'; import { Knex } from 'knex'; import splitToChunks from 'lodash/chunk'; import { DateTime } from 'luxon'; -import { Logger } from 'winston'; import { getDeferredStitchableEntities } from '../database/operations/stitcher/getDeferredStitchableEntities'; import { markForStitching } from '../database/operations/stitcher/markForStitching'; import { performStitching } from '../database/operations/stitcher/performStitching'; @@ -31,6 +30,7 @@ import { StitchingStrategy, stitchingStrategyFromConfig, } from './types'; +import { LoggerService } from '@backstage/backend-plugin-api'; type DeferredStitchItem = Awaited< ReturnType @@ -45,7 +45,7 @@ type StitchProgressTracker = ReturnType; */ export class DefaultStitcher implements Stitcher { private readonly knex: Knex; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly strategy: StitchingStrategy; private readonly tracker: StitchProgressTracker; private stopFunc?: () => void; @@ -54,7 +54,7 @@ export class DefaultStitcher implements Stitcher { config: Config, options: { knex: Knex; - logger: Logger; + logger: LoggerService; }, ): DefaultStitcher { return new DefaultStitcher({ @@ -66,7 +66,7 @@ export class DefaultStitcher implements Stitcher { constructor(options: { knex: Knex; - logger: Logger; + logger: LoggerService; strategy: StitchingStrategy; }) { this.knex = options.knex; diff --git a/plugins/catalog-backend/src/stitching/progressTracker.ts b/plugins/catalog-backend/src/stitching/progressTracker.ts index f82dbe378e..9e00a1a01b 100644 --- a/plugins/catalog-backend/src/stitching/progressTracker.ts +++ b/plugins/catalog-backend/src/stitching/progressTracker.ts @@ -18,12 +18,12 @@ import { stringifyError } from '@backstage/errors'; import { metrics } from '@opentelemetry/api'; import { Knex } from 'knex'; import { DateTime } from 'luxon'; -import { Logger } from 'winston'; import { DbRefreshStateRow } from '../database/tables'; import { createCounterMetric } from '../util/metrics'; +import { LoggerService } from '@backstage/backend-plugin-api'; // Helps wrap the timing and logging behaviors -export function progressTracker(knex: Knex, logger: Logger) { +export function progressTracker(knex: Knex, logger: LoggerService) { // prom-client metrics are deprecated in favour of OpenTelemetry metrics. const promStitchedEntities = createCounterMetric({ name: 'catalog_stitched_entities_count', diff --git a/plugins/catalog-backend/src/tests/integration.test.ts b/plugins/catalog-backend/src/tests/integration.test.ts index f3101a04e0..6ed2188773 100644 --- a/plugins/catalog-backend/src/tests/integration.test.ts +++ b/plugins/catalog-backend/src/tests/integration.test.ts @@ -34,7 +34,6 @@ import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { JsonObject } from '@backstage/types'; import { createHash } from 'crypto'; import { Knex } from 'knex'; -import { Logger } from 'winston'; import { EntitiesCatalog } from '../catalog/types'; import { DefaultCatalogDatabase } from '../database/DefaultCatalogDatabase'; import { DefaultProcessingDatabase } from '../database/DefaultProcessingDatabase'; @@ -54,8 +53,10 @@ import { DefaultEntitiesCatalog } from '../service/DefaultEntitiesCatalog'; import { DefaultRefreshService } from '../service/DefaultRefreshService'; import { RefreshOptions, RefreshService } from '../service/types'; import { DefaultStitcher } from '../stitching/DefaultStitcher'; +import { mockServices } from '@backstage/backend-test-utils'; +import { LoggerService } from '@backstage/backend-plugin-api'; -const voidLogger = getVoidLogger(); +const voidLogger = mockServices.logger.mock(); type ProgressTrackerWithErrorReports = ProgressTracker & { reportError(unprocessedEntity: Entity, errors: Error[]): void; @@ -198,7 +199,7 @@ class TestHarness { static async create(options?: { config?: JsonObject; - logger?: Logger; + logger?: LoggerService; db?: Knex; permissions?: PermissionEvaluator; processEntity?( diff --git a/plugins/code-coverage-backend/api-report.md b/plugins/code-coverage-backend/api-report.md index fef869a302..3b907a0261 100644 --- a/plugins/code-coverage-backend/api-report.md +++ b/plugins/code-coverage-backend/api-report.md @@ -9,7 +9,7 @@ import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; import express from 'express'; import { HttpAuthService } from '@backstage/backend-plugin-api'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { UrlReader } from '@backstage/backend-common'; @@ -36,7 +36,7 @@ export interface RouterOptions { // (undocumented) httpAuth?: HttpAuthService; // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) urlReader: UrlReader; } diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 172e692cb3..4b9bb3e92c 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -47,7 +47,6 @@ "express-promise-router": "^4.1.0", "knex": "^3.0.0", "uuid": "^9.0.0", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/code-coverage-backend/src/plugin.ts b/plugins/code-coverage-backend/src/plugin.ts index 0ddb6418bc..4e4dfca536 100644 --- a/plugins/code-coverage-backend/src/plugin.ts +++ b/plugins/code-coverage-backend/src/plugin.ts @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -48,7 +47,7 @@ export const codeCoveragePlugin = createBackendPlugin({ httpRouter.use( await createRouter({ config, - logger: loggerToWinstonLogger(logger), + logger, urlReader, discovery, database, diff --git a/plugins/code-coverage-backend/src/service/converter/cobertura.ts b/plugins/code-coverage-backend/src/service/converter/cobertura.ts index 540ea95944..71893abf02 100644 --- a/plugins/code-coverage-backend/src/service/converter/cobertura.ts +++ b/plugins/code-coverage-backend/src/service/converter/cobertura.ts @@ -15,11 +15,11 @@ */ import { BranchHit, FileEntry } from '../types'; import { CoberturaXML, InnerClass, LineHit } from './types'; -import { Logger } from 'winston'; import { Converter } from './Converter'; +import { LoggerService } from '@backstage/backend-plugin-api'; export class Cobertura implements Converter { - constructor(readonly logger: Logger) { + constructor(readonly logger: LoggerService) { this.logger = logger; } diff --git a/plugins/code-coverage-backend/src/service/converter/jacoco.ts b/plugins/code-coverage-backend/src/service/converter/jacoco.ts index d461cfe7d7..cb3307aa12 100644 --- a/plugins/code-coverage-backend/src/service/converter/jacoco.ts +++ b/plugins/code-coverage-backend/src/service/converter/jacoco.ts @@ -16,8 +16,8 @@ import { BranchHit, FileEntry } from '../types'; import { JacocoSourceFile, JacocoXML } from './types'; -import { Logger } from 'winston'; import { Converter } from './Converter'; +import { LoggerService } from '@backstage/backend-plugin-api'; type ParsedLine = { number: number; @@ -28,7 +28,7 @@ type ParsedLine = { }; export class Jacoco implements Converter { - constructor(readonly logger: Logger) { + constructor(readonly logger: LoggerService) { this.logger = logger; } diff --git a/plugins/code-coverage-backend/src/service/converter/lcov.ts b/plugins/code-coverage-backend/src/service/converter/lcov.ts index e2f5733dae..fbcf9fab89 100644 --- a/plugins/code-coverage-backend/src/service/converter/lcov.ts +++ b/plugins/code-coverage-backend/src/service/converter/lcov.ts @@ -14,11 +14,11 @@ * limitations under the License. */ import { FileEntry } from '../types'; -import { Logger } from 'winston'; import { Converter } from './Converter'; +import { LoggerService } from '@backstage/backend-plugin-api'; export class Lcov implements Converter { - constructor(readonly logger: Logger) { + constructor(readonly logger: LoggerService) { this.logger = logger; } diff --git a/plugins/code-coverage-backend/src/service/router.ts b/plugins/code-coverage-backend/src/service/router.ts index d1a0a1703c..cf52c098e0 100644 --- a/plugins/code-coverage-backend/src/service/router.ts +++ b/plugins/code-coverage-backend/src/service/router.ts @@ -16,7 +16,6 @@ import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import BodyParser from 'body-parser'; import bodyParserXml from 'body-parser-xml'; import { CatalogApi, CatalogClient } from '@backstage/catalog-client'; @@ -32,9 +31,13 @@ import { Config } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; import { CodeCoverageDatabase } from './CodeCoverageDatabase'; import { aggregateCoverage, CoverageUtils } from './CoverageUtils'; -import { Converter, Jacoco, Cobertura, Lcov } from './converter'; +import { Cobertura, Converter, Jacoco, Lcov } from './converter'; import { getEntitySourceLocation } from '@backstage/catalog-model'; -import { AuthService, HttpAuthService } from '@backstage/backend-plugin-api'; +import { + AuthService, + HttpAuthService, + LoggerService, +} from '@backstage/backend-plugin-api'; /** * Options for {@link createRouter}. @@ -46,7 +49,7 @@ export interface RouterOptions { discovery: PluginEndpointDiscovery; database: PluginDatabaseManager; urlReader: UrlReader; - logger: Logger; + logger: LoggerService; catalogApi?: CatalogApi; auth?: AuthService; httpAuth?: HttpAuthService; diff --git a/plugins/code-coverage-backend/src/service/standaloneServer.ts b/plugins/code-coverage-backend/src/service/standaloneServer.ts index a2207b86d9..3defbd6d62 100644 --- a/plugins/code-coverage-backend/src/service/standaloneServer.ts +++ b/plugins/code-coverage-backend/src/service/standaloneServer.ts @@ -24,14 +24,14 @@ import { import { CatalogApi } from '@backstage/catalog-client'; import { CompoundEntityRef, parseEntityRef } from '@backstage/catalog-model'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; import { ConfigReader } from '@backstage/config'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/devtools-backend/api-report.md b/plugins/devtools-backend/api-report.md index 9bde25bd54..d0632fd912 100644 --- a/plugins/devtools-backend/api-report.md +++ b/plugins/devtools-backend/api-report.md @@ -11,7 +11,7 @@ import { DiscoveryService } from '@backstage/backend-plugin-api'; import express from 'express'; import { ExternalDependency } from '@backstage/plugin-devtools-common'; import { HttpAuthService } from '@backstage/backend-plugin-api'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PermissionsService } from '@backstage/backend-plugin-api'; // @public (undocumented) @@ -19,7 +19,7 @@ export function createRouter(options: RouterOptions): Promise; // @public (undocumented) export class DevToolsBackendApi { - constructor(logger: Logger, config: Config); + constructor(logger: LoggerService, config: Config); // (undocumented) listConfig(): Promise; // (undocumented) @@ -43,7 +43,7 @@ export interface RouterOptions { // (undocumented) httpAuth?: HttpAuthService; // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) permissions: PermissionsService; } diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json index 107790bb02..b892623eb9 100644 --- a/plugins/devtools-backend/package.json +++ b/plugins/devtools-backend/package.json @@ -49,7 +49,6 @@ "node-fetch": "^2.6.7", "ping": "^0.4.1", "semver": "^7.5.3", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/devtools-backend/src/api/DevToolsBackendApi.ts b/plugins/devtools-backend/src/api/DevToolsBackendApi.ts index b71edb3391..ae687f3cb0 100644 --- a/plugins/devtools-backend/src/api/DevToolsBackendApi.ts +++ b/plugins/devtools-backend/src/api/DevToolsBackendApi.ts @@ -26,7 +26,6 @@ import { } from '@backstage/plugin-devtools-common'; import { JsonObject } from '@backstage/types'; -import { Logger } from 'winston'; import fetch from 'node-fetch'; import { findPaths } from '@backstage/cli-common'; import { getPackages } from '@manypkg/get-packages'; @@ -36,11 +35,12 @@ import fs from 'fs-extra'; import { Lockfile } from '../util/Lockfile'; import { memoize } from 'lodash'; import { assertError } from '@backstage/errors'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** @public */ export class DevToolsBackendApi { public constructor( - private readonly logger: Logger, + private readonly logger: LoggerService, private readonly config: Config, ) {} diff --git a/plugins/devtools-backend/src/plugin.ts b/plugins/devtools-backend/src/plugin.ts index fb0bb8b048..ee7bf369f5 100644 --- a/plugins/devtools-backend/src/plugin.ts +++ b/plugins/devtools-backend/src/plugin.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -49,7 +48,7 @@ export const devtoolsPlugin = createBackendPlugin({ httpRouter.use( await createRouter({ config, - logger: loggerToWinstonLogger(logger), + logger, permissions, discovery, httpAuth, diff --git a/plugins/devtools-backend/src/service/router.ts b/plugins/devtools-backend/src/service/router.ts index 4c964dfbc5..cec3d87a5a 100644 --- a/plugins/devtools-backend/src/service/router.ts +++ b/plugins/devtools-backend/src/service/router.ts @@ -23,7 +23,6 @@ import { import { Config } from '@backstage/config'; import { DevToolsBackendApi } from '../api'; -import { Logger } from 'winston'; import { NotAllowedError } from '@backstage/errors'; import Router from 'express-promise-router'; import { @@ -35,13 +34,14 @@ import { createPermissionIntegrationRouter } from '@backstage/plugin-permission- import { DiscoveryService, HttpAuthService, + LoggerService, PermissionsService, } from '@backstage/backend-plugin-api'; /** @public */ export interface RouterOptions { devToolsBackendApi?: DevToolsBackendApi; - logger: Logger; + logger: LoggerService; config: Config; permissions: PermissionsService; discovery: DiscoveryService; diff --git a/plugins/devtools-backend/src/service/standaloneServer.ts b/plugins/devtools-backend/src/service/standaloneServer.ts index 75404e98b2..136db7bf89 100644 --- a/plugins/devtools-backend/src/service/standaloneServer.ts +++ b/plugins/devtools-backend/src/service/standaloneServer.ts @@ -15,21 +15,21 @@ */ import { - ServerTokenManager, - HostDiscovery, createServiceBuilder, + HostDiscovery, loadBackendConfig, + ServerTokenManager, } from '@backstage/backend-common'; -import { Logger } from 'winston'; import { Server } from 'http'; import { ServerPermissionClient } from '@backstage/plugin-permission-node'; import { createRouter } from './router'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/entity-feedback-backend/api-report.md b/plugins/entity-feedback-backend/api-report.md index 573d56efb5..e38f38d64a 100644 --- a/plugins/entity-feedback-backend/api-report.md +++ b/plugins/entity-feedback-backend/api-report.md @@ -8,7 +8,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; import express from 'express'; import { HttpAuthService } from '@backstage/backend-plugin-api'; import { IdentityApi } from '@backstage/plugin-auth-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; @@ -32,6 +32,6 @@ export interface RouterOptions { // (undocumented) identity: IdentityApi; // (undocumented) - logger: Logger; + logger: LoggerService; } ``` diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json index a96ec51403..6a034de40b 100644 --- a/plugins/entity-feedback-backend/package.json +++ b/plugins/entity-feedback-backend/package.json @@ -45,7 +45,6 @@ "express-promise-router": "^4.1.0", "knex": "^3.0.0", "node-fetch": "^2.6.7", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/entity-feedback-backend/src/plugin.ts b/plugins/entity-feedback-backend/src/plugin.ts index a3111a2308..bf404b55ff 100644 --- a/plugins/entity-feedback-backend/src/plugin.ts +++ b/plugins/entity-feedback-backend/src/plugin.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -53,7 +52,7 @@ export const entityFeedbackPlugin = createBackendPlugin({ database, discovery, identity, - logger: loggerToWinstonLogger(logger), + logger, auth, httpAuth, }), diff --git a/plugins/entity-feedback-backend/src/service/router.ts b/plugins/entity-feedback-backend/src/service/router.ts index 8d8cb0d600..bad5633288 100644 --- a/plugins/entity-feedback-backend/src/service/router.ts +++ b/plugins/entity-feedback-backend/src/service/router.ts @@ -20,7 +20,11 @@ import { PluginDatabaseManager, PluginEndpointDiscovery, } from '@backstage/backend-common'; -import { AuthService, HttpAuthService } from '@backstage/backend-plugin-api'; +import { + AuthService, + HttpAuthService, + LoggerService, +} from '@backstage/backend-plugin-api'; import { CatalogClient } from '@backstage/catalog-client'; import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { IdentityApi } from '@backstage/plugin-auth-node'; @@ -31,7 +35,6 @@ import { import { InputError } from '@backstage/errors'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { DatabaseHandler } from './DatabaseHandler'; @@ -42,7 +45,7 @@ export interface RouterOptions { database: PluginDatabaseManager; discovery: PluginEndpointDiscovery; identity: IdentityApi; - logger: Logger; + logger: LoggerService; auth?: AuthService; httpAuth?: HttpAuthService; } diff --git a/plugins/entity-feedback-backend/src/service/standaloneServer.ts b/plugins/entity-feedback-backend/src/service/standaloneServer.ts index 27c48ebb1e..0ddc28e00d 100644 --- a/plugins/entity-feedback-backend/src/service/standaloneServer.ts +++ b/plugins/entity-feedback-backend/src/service/standaloneServer.ts @@ -17,19 +17,19 @@ import { createServiceBuilder, DatabaseManager, - loadBackendConfig, HostDiscovery, + loadBackendConfig, } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/example-todo-list-backend/api-report.md b/plugins/example-todo-list-backend/api-report.md index 4c27733124..51733d1a43 100644 --- a/plugins/example-todo-list-backend/api-report.md +++ b/plugins/example-todo-list-backend/api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; import express from 'express'; import { IdentityApi } from '@backstage/plugin-auth-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; // @public export function createRouter(options: RouterOptions): Promise; @@ -20,7 +20,7 @@ export interface RouterOptions { // (undocumented) identity: IdentityApi; // (undocumented) - logger: Logger; + logger: LoggerService; } // (No @packageDocumentation comment for this package) diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 673962eea8..762ccd8317 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -41,7 +41,6 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "uuid": "^9.0.0", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/example-todo-list-backend/src/plugin.ts b/plugins/example-todo-list-backend/src/plugin.ts index 1838a8a165..ccff192d4c 100644 --- a/plugins/example-todo-list-backend/src/plugin.ts +++ b/plugins/example-todo-list-backend/src/plugin.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -39,7 +38,7 @@ export const exampleTodoListPlugin = createBackendPlugin({ httpRouter.use( await createRouter({ identity, - logger: loggerToWinstonLogger(logger), + logger, }), ); httpRouter.addAuthPolicy({ diff --git a/plugins/example-todo-list-backend/src/service/router.ts b/plugins/example-todo-list-backend/src/service/router.ts index a1ae98eac9..09b8669507 100644 --- a/plugins/example-todo-list-backend/src/service/router.ts +++ b/plugins/example-todo-list-backend/src/service/router.ts @@ -17,10 +17,10 @@ import { errorHandler } from '@backstage/backend-common'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { add, getAll, update } from './todos'; import { InputError } from '@backstage/errors'; import { IdentityApi } from '@backstage/plugin-auth-node'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Dependencies of the todo-list router @@ -28,7 +28,7 @@ import { IdentityApi } from '@backstage/plugin-auth-node'; * @public */ export interface RouterOptions { - logger: Logger; + logger: LoggerService; identity: IdentityApi; } diff --git a/plugins/example-todo-list-backend/src/service/standaloneServer.ts b/plugins/example-todo-list-backend/src/service/standaloneServer.ts index 77c78365d6..7ed0c064b7 100644 --- a/plugins/example-todo-list-backend/src/service/standaloneServer.ts +++ b/plugins/example-todo-list-backend/src/service/standaloneServer.ts @@ -16,18 +16,18 @@ import { createServiceBuilder, - loadBackendConfig, HostDiscovery, + loadBackendConfig, } from '@backstage/backend-common'; import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/explore-backend/api-report.md b/plugins/explore-backend/api-report.md index 05a057fa7b..cca2d0b7cf 100644 --- a/plugins/explore-backend/api-report.md +++ b/plugins/explore-backend/api-report.md @@ -9,7 +9,7 @@ import { ExploreTool } from '@backstage/plugin-explore-common'; import express from 'express'; import { GetExploreToolsRequest } from '@backstage/plugin-explore-common'; import { GetExploreToolsResponse } from '@backstage/plugin-explore-common'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import type { ToolDocument as ToolDocument_2 } from '@backstage/plugin-search-backend-module-explore'; import { ToolDocumentCollatorFactory as ToolDocumentCollatorFactory_2 } from '@backstage/plugin-search-backend-module-explore'; import type { ToolDocumentCollatorFactoryOptions as ToolDocumentCollatorFactoryOptions_2 } from '@backstage/plugin-search-backend-module-explore'; @@ -29,7 +29,7 @@ export interface ExploreToolProvider { // @public (undocumented) export interface RouterOptions { // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) toolProvider: ExploreToolProvider; } diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index ce9bf0f6b1..e3a45d6d9d 100644 --- a/plugins/explore-backend/package.json +++ b/plugins/explore-backend/package.json @@ -43,7 +43,6 @@ "express-promise-router": "^4.1.0", "lodash": "^4.17.21", "node-fetch": "^2.6.7", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/explore-backend/src/plugin.ts b/plugins/explore-backend/src/plugin.ts index d81493c85a..4c6411d7ca 100644 --- a/plugins/explore-backend/src/plugin.ts +++ b/plugins/explore-backend/src/plugin.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -39,7 +38,7 @@ export const explorePlugin = createBackendPlugin({ async init({ config, httpRouter, logger }) { httpRouter.use( await createRouter({ - logger: loggerToWinstonLogger(logger), + logger, toolProvider: StaticExploreToolProvider.fromConfig(config), }), ); diff --git a/plugins/explore-backend/src/service/router.test.ts b/plugins/explore-backend/src/service/router.test.ts index 5fe5b6c6a3..ad7b57e18c 100644 --- a/plugins/explore-backend/src/service/router.test.ts +++ b/plugins/explore-backend/src/service/router.test.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { getVoidLogger } from '@backstage/backend-common'; import { ExploreTool, GetExploreToolsRequest, @@ -23,6 +22,7 @@ import express from 'express'; import request from 'supertest'; import { ExploreToolProvider } from '../tools'; import { createRouter } from './router'; +import { mockServices } from '@backstage/backend-test-utils'; const mockTools: ExploreTool[] = [ { title: 'Tool 1', url: 'https://example.com/tool1', image: '' }, @@ -42,7 +42,7 @@ describe('createRouter', () => { beforeAll(async () => { const router = await createRouter({ - logger: getVoidLogger(), + logger: mockServices.logger.mock(), toolProvider, }); app = express().use(router); diff --git a/plugins/explore-backend/src/service/router.ts b/plugins/explore-backend/src/service/router.ts index 393736529a..2a11515c33 100644 --- a/plugins/explore-backend/src/service/router.ts +++ b/plugins/explore-backend/src/service/router.ts @@ -18,14 +18,14 @@ import { errorHandler } from '@backstage/backend-common'; import { GetExploreToolsRequest } from '@backstage/plugin-explore-common'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { ExploreToolProvider } from '../tools'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * @public */ export interface RouterOptions { - logger: Logger; + logger: LoggerService; toolProvider: ExploreToolProvider; } diff --git a/plugins/explore-backend/src/service/standaloneServer.ts b/plugins/explore-backend/src/service/standaloneServer.ts index 6cf5852f18..53ee02b8ae 100644 --- a/plugins/explore-backend/src/service/standaloneServer.ts +++ b/plugins/explore-backend/src/service/standaloneServer.ts @@ -17,13 +17,13 @@ import { createServiceBuilder } from '@backstage/backend-common'; import { GetExploreToolsRequest } from '@backstage/plugin-explore-common'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/jenkins-backend/api-report.md b/plugins/jenkins-backend/api-report.md index 2024c5206d..e661f9112e 100644 --- a/plugins/jenkins-backend/api-report.md +++ b/plugins/jenkins-backend/api-report.md @@ -12,7 +12,7 @@ import { Config } from '@backstage/config'; import { DiscoveryService } from '@backstage/backend-plugin-api'; import express from 'express'; import { HttpAuthService } from '@backstage/backend-plugin-api'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; @@ -102,7 +102,7 @@ export interface RouterOptions { // (undocumented) jenkinsInfoProvider: JenkinsInfoProvider; // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) permissions?: PermissionEvaluator | PermissionAuthorizer; } diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 6485b6e4f3..58e7833598 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -48,7 +48,6 @@ "express-promise-router": "^4.1.0", "jenkins": "^1.0.0", "node-fetch": "^2.6.7", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/jenkins-backend/src/plugin.ts b/plugins/jenkins-backend/src/plugin.ts index aa0622ab5f..c652d3ccbd 100644 --- a/plugins/jenkins-backend/src/plugin.ts +++ b/plugins/jenkins-backend/src/plugin.ts @@ -14,10 +14,9 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { - createBackendPlugin, coreServices, + createBackendPlugin, } from '@backstage/backend-plugin-api'; import { DefaultJenkinsInfoProvider } from './service/jenkinsInfoProvider'; import { createRouter } from './service/router'; @@ -52,7 +51,6 @@ export const jenkinsPlugin = createBackendPlugin({ auth, httpAuth, }) { - const winstonLogger = loggerToWinstonLogger(logger); const jenkinsInfoProvider = DefaultJenkinsInfoProvider.fromConfig({ auth, httpAuth, @@ -66,7 +64,7 @@ export const jenkinsPlugin = createBackendPlugin({ /** * Logger for logging purposes */ - logger: winstonLogger, + logger, /** * Info provider to be able to get all necessary information for the APIs */ diff --git a/plugins/jenkins-backend/src/service/router.ts b/plugins/jenkins-backend/src/service/router.ts index bda9686efb..d49b844ab7 100644 --- a/plugins/jenkins-backend/src/service/router.ts +++ b/plugins/jenkins-backend/src/service/router.ts @@ -20,7 +20,6 @@ import { } from '@backstage/backend-common'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { JenkinsInfoProvider } from './jenkinsInfoProvider'; import { JenkinsApiImpl } from './jenkinsApi'; import { @@ -36,11 +35,12 @@ import { AuthService, DiscoveryService, HttpAuthService, + LoggerService, } from '@backstage/backend-plugin-api'; /** @public */ export interface RouterOptions { - logger: Logger; + logger: LoggerService; jenkinsInfoProvider: JenkinsInfoProvider; permissions?: PermissionEvaluator | PermissionAuthorizer; discovery: DiscoveryService; diff --git a/plugins/jenkins-backend/src/service/standaloneServer.ts b/plugins/jenkins-backend/src/service/standaloneServer.ts index ab77bb6573..6bb1e4735e 100644 --- a/plugins/jenkins-backend/src/service/standaloneServer.ts +++ b/plugins/jenkins-backend/src/service/standaloneServer.ts @@ -14,18 +14,18 @@ * limitations under the License. */ -import { HostDiscovery, createServiceBuilder } from '@backstage/backend-common'; +import { createServiceBuilder, HostDiscovery } from '@backstage/backend-common'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { JenkinsInfo } from './jenkinsInfoProvider'; import { Config } from '@backstage/config'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; config: Config; } diff --git a/plugins/kafka-backend/api-report.md b/plugins/kafka-backend/api-report.md index 20c8260b52..2d820cdabc 100644 --- a/plugins/kafka-backend/api-report.md +++ b/plugins/kafka-backend/api-report.md @@ -5,7 +5,7 @@ ```ts import { Config } from '@backstage/config'; import express from 'express'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; // @public (undocumented) export function createRouter(options: RouterOptions): Promise; @@ -15,6 +15,6 @@ export interface RouterOptions { // (undocumented) config: Config; // (undocumented) - logger: Logger; + logger: LoggerService; } ``` diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index f6eca5a55e..9e5c836d95 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -59,8 +59,7 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "kafkajs": "^2.0.0", - "lodash": "^4.17.21", - "winston": "^3.2.1" + "lodash": "^4.17.21" }, "devDependencies": { "@backstage/cli": "workspace:^", diff --git a/plugins/kafka-backend/src/alpha.ts b/plugins/kafka-backend/src/alpha.ts index bc627eb9d3..54d7935071 100644 --- a/plugins/kafka-backend/src/alpha.ts +++ b/plugins/kafka-backend/src/alpha.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -36,9 +35,7 @@ export default createBackendPlugin({ httpRouter: coreServices.httpRouter, }, async init({ config, logger, httpRouter }) { - httpRouter.use( - await createRouter({ config, logger: loggerToWinstonLogger(logger) }), - ); + httpRouter.use(await createRouter({ config, logger })); }, }); }, diff --git a/plugins/kafka-backend/src/service/KafkaApi.ts b/plugins/kafka-backend/src/service/KafkaApi.ts index 28595dd418..c3fbf83886 100644 --- a/plugins/kafka-backend/src/service/KafkaApi.ts +++ b/plugins/kafka-backend/src/service/KafkaApi.ts @@ -15,8 +15,8 @@ */ import { Kafka, SeekEntry } from 'kafkajs'; -import { Logger } from 'winston'; import { SaslConfig, SslConfig } from '../types/types'; +import { LoggerService } from '@backstage/backend-plugin-api'; export type PartitionOffset = { id: number; @@ -33,7 +33,7 @@ export type Options = { brokers: string[]; ssl?: SslConfig; sasl?: SaslConfig; - logger: Logger; + logger: LoggerService; }; export interface KafkaApi { @@ -43,7 +43,7 @@ export interface KafkaApi { export class KafkaJsApiImpl implements KafkaApi { private readonly kafka: Kafka; - private readonly logger: Logger; + private readonly logger: LoggerService; constructor(options: Options) { options.logger.debug( diff --git a/plugins/kafka-backend/src/service/router.ts b/plugins/kafka-backend/src/service/router.ts index 1271e8f48c..4e729198f2 100644 --- a/plugins/kafka-backend/src/service/router.ts +++ b/plugins/kafka-backend/src/service/router.ts @@ -16,16 +16,16 @@ import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { Config } from '@backstage/config'; import { NotFoundError } from '@backstage/errors'; import { KafkaApi, KafkaJsApiImpl } from './KafkaApi'; import _ from 'lodash'; import { getClusterDetails } from '../config/ClusterReader'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** @public */ export interface RouterOptions { - logger: Logger; + logger: LoggerService; config: Config; } @@ -35,7 +35,7 @@ export interface ClusterApi { } export const makeRouter = ( - logger: Logger, + logger: LoggerService, kafkaApis: ClusterApi[], ): express.Router => { const router = Router(); diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index cdb12a70b1..c31af334d7 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -24,6 +24,7 @@ import { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; import type { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { KubernetesServiceLocator as KubernetesServiceLocator_2 } from '@backstage/plugin-kubernetes-node'; import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { ObjectToFetch as ObjectToFetch_2 } from '@backstage/plugin-kubernetes-node'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { PermissionsService } from '@backstage/backend-plugin-api'; @@ -75,7 +76,7 @@ export class AwsIamStrategy implements AuthenticationStrategy_2 { // @public (undocumented) export class AzureIdentityStrategy implements AuthenticationStrategy_2 { - constructor(logger: Logger, tokenCredential?: TokenCredential); + constructor(logger: LoggerService, tokenCredential?: TokenCredential); // (undocumented) getCredential(): Promise; // (undocumented) @@ -189,7 +190,7 @@ export class KubernetesBuilder { ): KubernetesObjectsProvider_2; // (undocumented) protected buildProxy( - logger: Logger, + logger: LoggerService, clusterSupplier: KubernetesClustersSupplier_2, discovery: DiscoveryService, httpAuth: HttpAuthService, @@ -240,7 +241,7 @@ export class KubernetesBuilder { protected getObjectTypesToFetch(): ObjectToFetch_2[] | undefined; // (undocumented) protected getProxy( - logger: Logger, + logger: LoggerService, clusterSupplier: KubernetesClustersSupplier_2, discovery: DiscoveryService, httpAuth: HttpAuthService, @@ -301,7 +302,7 @@ export interface KubernetesEnvironment { // (undocumented) httpAuth?: HttpAuthService; // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) permissions: PermissionEvaluator; } @@ -321,7 +322,7 @@ export interface KubernetesObjectsProviderOptions { // (undocumented) fetcher: k8sAuthTypes.KubernetesFetcher; // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) objectTypesToFetch?: k8sAuthTypes.ObjectToFetch[]; // (undocumented) @@ -347,7 +348,7 @@ export type KubernetesProxyCreateRequestHandlerOptions = { // @public export type KubernetesProxyOptions = { - logger: Logger; + logger: LoggerService; clusterSupplier: KubernetesClustersSupplier; authStrategy: AuthenticationStrategy; discovery: DiscoveryService; diff --git a/plugins/kubernetes-backend/src/auth/AzureIdentityStrategy.ts b/plugins/kubernetes-backend/src/auth/AzureIdentityStrategy.ts index a1b29a10a1..1c6b4b81ea 100644 --- a/plugins/kubernetes-backend/src/auth/AzureIdentityStrategy.ts +++ b/plugins/kubernetes-backend/src/auth/AzureIdentityStrategy.ts @@ -14,17 +14,17 @@ * limitations under the License. */ -import { Logger } from 'winston'; import { AccessToken, DefaultAzureCredential, TokenCredential, } from '@azure/identity'; import { - AuthMetadata, AuthenticationStrategy, + AuthMetadata, KubernetesCredential, } from '@backstage/plugin-kubernetes-node'; +import { LoggerService } from '@backstage/backend-plugin-api'; const aksScope = '6dae42f8-4368-4678-94ff-3960e28e3630/.default'; // This scope is the same for all Azure Managed Kubernetes @@ -37,7 +37,7 @@ export class AzureIdentityStrategy implements AuthenticationStrategy { private newTokenPromise: Promise | undefined; constructor( - private readonly logger: Logger, + private readonly logger: LoggerService, private readonly tokenCredential: TokenCredential = new DefaultAzureCredential(), ) {} diff --git a/plugins/kubernetes-backend/src/cluster-locator/index.ts b/plugins/kubernetes-backend/src/cluster-locator/index.ts index cab1d1df1f..7b8310b965 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/index.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/index.ts @@ -17,7 +17,6 @@ import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; import { Duration } from 'luxon'; -import { Logger } from 'winston'; import { ClusterDetails, KubernetesClustersSupplier } from '../types/types'; import { AuthenticationStrategy } from '../auth/types'; import { ConfigClusterLocator } from './ConfigClusterLocator'; @@ -27,12 +26,13 @@ import { LocalKubectlProxyClusterLocator } from './LocalKubectlProxyLocator'; import { AuthService, BackstageCredentials, + LoggerService, } from '@backstage/backend-plugin-api'; class CombinedClustersSupplier implements KubernetesClustersSupplier { constructor( readonly clusterSuppliers: KubernetesClustersSupplier[], - readonly logger: Logger, + readonly logger: LoggerService, ) {} async getClusters(options: { @@ -71,7 +71,7 @@ export const getCombinedClusterSupplier = ( rootConfig: Config, catalogClient: CatalogApi, authStrategy: AuthenticationStrategy, - logger: Logger, + logger: LoggerService, refreshInterval: Duration | undefined = undefined, auth: AuthService, ): KubernetesClustersSupplier => { diff --git a/plugins/kubernetes-backend/src/plugin.ts b/plugins/kubernetes-backend/src/plugin.ts index d3aacd5190..57221e377c 100644 --- a/plugins/kubernetes-backend/src/plugin.ts +++ b/plugins/kubernetes-backend/src/plugin.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -24,20 +23,20 @@ import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha'; import { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend'; import { - kubernetesAuthStrategyExtensionPoint, - kubernetesClusterSupplierExtensionPoint, - kubernetesFetcherExtensionPoint, - kubernetesObjectsProviderExtensionPoint, - kubernetesServiceLocatorExtensionPoint, type AuthenticationStrategy, + kubernetesAuthStrategyExtensionPoint, type KubernetesAuthStrategyExtensionPoint, - type KubernetesClusterSupplierExtensionPoint, type KubernetesClustersSupplier, + kubernetesClusterSupplierExtensionPoint, + type KubernetesClusterSupplierExtensionPoint, type KubernetesFetcher, + kubernetesFetcherExtensionPoint, type KubernetesFetcherExtensionPoint, type KubernetesObjectsProvider, + kubernetesObjectsProviderExtensionPoint, type KubernetesObjectsProviderExtensionPoint, type KubernetesServiceLocator, + kubernetesServiceLocatorExtensionPoint, type KubernetesServiceLocatorExtensionPoint, } from '@backstage/plugin-kubernetes-node'; @@ -194,10 +193,9 @@ export const kubernetesPlugin = createBackendPlugin({ auth, httpAuth, }) { - const winstonLogger = loggerToWinstonLogger(logger); // TODO: expose all of the customization & extension points of the builder here const builder: KubernetesBuilder = KubernetesBuilder.createBuilder({ - logger: winstonLogger, + logger, config, catalogApi, permissions, diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts index c065b0124f..8f006cdc86 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts @@ -25,7 +25,6 @@ import { createPermissionIntegrationRouter } from '@backstage/plugin-permission- import express from 'express'; import Router from 'express-promise-router'; import { Duration } from 'luxon'; -import { Logger } from 'winston'; import { AksStrategy, @@ -46,15 +45,16 @@ import { BackstageCredentials, DiscoveryService, HttpAuthService, + LoggerService, } from '@backstage/backend-plugin-api'; import { - AuthMetadata, AuthenticationStrategy, + AuthMetadata, CustomResource, KubernetesClustersSupplier, KubernetesFetcher, - KubernetesObjectTypes, KubernetesObjectsProvider, + KubernetesObjectTypes, KubernetesServiceLocator, } from '@backstage/plugin-kubernetes-node'; import { addResourceRoutesToRouter } from '../routes/resourcesRoutes'; @@ -78,7 +78,7 @@ import { KubernetesProxy } from './KubernetesProxy'; * @public */ export interface KubernetesEnvironment { - logger: Logger; + logger: LoggerService; config: Config; catalogApi: CatalogApi; discovery: DiscoveryService; @@ -353,7 +353,7 @@ export class KubernetesBuilder { } protected buildProxy( - logger: Logger, + logger: LoggerService, clusterSupplier: KubernetesClustersSupplier, discovery: DiscoveryService, httpAuth: HttpAuthService, @@ -540,7 +540,7 @@ export class KubernetesBuilder { } protected getProxy( - logger: Logger, + logger: LoggerService, clusterSupplier: KubernetesClustersSupplier, discovery: DiscoveryService, httpAuth: HttpAuthService, diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index b7a5dabf1d..53b5070e61 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -15,26 +15,25 @@ */ import { Entity } from '@backstage/catalog-model'; -import { Logger } from 'winston'; import { + CustomResource, + FetchResponseWrapper, KubernetesFetcher, KubernetesObjectsProviderOptions, KubernetesServiceLocator, ObjectsByEntityRequest, - FetchResponseWrapper, ObjectToFetch, - CustomResource, } from '../types/types'; import { ClientContainerStatus, ClientCurrentResourceUsage, ClientPodStatus, ClusterObjects, + CustomResourceMatcher, FetchResponse, + KubernetesRequestAuth, ObjectsByEntityResponse, PodFetchResponse, - KubernetesRequestAuth, - CustomResourceMatcher, PodStatusFetchResponse, } from '@backstage/plugin-kubernetes-common'; import { @@ -50,7 +49,10 @@ import { KubernetesObjectsByEntity, KubernetesObjectsProvider, } from '@backstage/plugin-kubernetes-node'; -import { BackstageCredentials } from '@backstage/backend-plugin-api'; +import { + BackstageCredentials, + LoggerService, +} from '@backstage/backend-plugin-api'; /** * @@ -193,7 +195,7 @@ const toClientSafePodMetrics = ( type responseWithMetrics = [FetchResponseWrapper, PodStatusFetchResponse[]]; export class KubernetesFanOutHandler implements KubernetesObjectsProvider { - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly fetcher: KubernetesFetcher; private readonly serviceLocator: KubernetesServiceLocator; private readonly customResources: CustomResource[]; diff --git a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts index b7354d54d4..e5f25652e6 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts @@ -15,16 +15,15 @@ */ import { - Config, + bufferFromFileOrString, Cluster, + Config, CoreV1Api, KubeConfig, Metrics, - bufferFromFileOrString, topPods, } from '@kubernetes/client-node'; import lodash, { Dictionary } from 'lodash'; -import { Logger } from 'winston'; import { FetchResponseWrapper, KubernetesFetcher, @@ -33,8 +32,8 @@ import { import { ANNOTATION_KUBERNETES_AUTH_PROVIDER, FetchResponse, - KubernetesFetchError, KubernetesErrorTypes, + KubernetesFetchError, PodStatusFetchResponse, } from '@backstage/plugin-kubernetes-common'; import fetch, { RequestInit, Response } from 'node-fetch'; @@ -45,9 +44,10 @@ import { ClusterDetails, KubernetesCredential, } from '@backstage/plugin-kubernetes-node'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface KubernetesClientBasedFetcherOptions { - logger: Logger; + logger: LoggerService; } type FetchResult = FetchResponse | KubernetesFetchError; @@ -84,7 +84,7 @@ const statusCodeToErrorType = (statusCode: number): KubernetesErrorTypes => { }; export class KubernetesClientBasedFetcher implements KubernetesFetcher { - private readonly logger: Logger; + private readonly logger: LoggerService; constructor({ logger }: KubernetesClientBasedFetcherOptions) { this.logger = logger; diff --git a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts index 0d6370ddc5..a1ab68d589 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts @@ -22,19 +22,18 @@ import { } from '@backstage/errors'; import { ANNOTATION_KUBERNETES_AUTH_PROVIDER, - KubernetesRequestAuth, kubernetesProxyPermission, + KubernetesRequestAuth, } from '@backstage/plugin-kubernetes-common'; import { AuthorizeResult } from '@backstage/plugin-permission-common'; import { - Cluster, - KubeConfig, bufferFromFileOrString, + Cluster, + Config, + KubeConfig, } from '@kubernetes/client-node'; import { createProxyMiddleware, RequestHandler } from 'http-proxy-middleware'; -import { Logger } from 'winston'; import fs from 'fs-extra'; -import { Config } from '@kubernetes/client-node'; import { AuthenticationStrategy } from '../auth'; import { ClusterDetails, KubernetesClustersSupplier } from '../types/types'; @@ -44,9 +43,13 @@ import { IncomingHttpHeaders } from 'http'; import { DiscoveryService, HttpAuthService, + LoggerService, PermissionsService, } from '@backstage/backend-plugin-api'; -import { createLegacyAuthAdapters } from '@backstage/backend-common'; +import { + createLegacyAuthAdapters, + loggerToWinstonLogger, +} from '@backstage/backend-common'; export const APPLICATION_JSON: string = 'application/json'; @@ -80,7 +83,7 @@ export type KubernetesProxyCreateRequestHandlerOptions = { * @public */ export type KubernetesProxyOptions = { - logger: Logger; + logger: LoggerService; clusterSupplier: KubernetesClustersSupplier; authStrategy: AuthenticationStrategy; discovery: DiscoveryService; @@ -94,7 +97,7 @@ export type KubernetesProxyOptions = { */ export class KubernetesProxy { private readonly middlewareForClusterName = new Map(); - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly clusterSupplier: KubernetesClustersSupplier; private readonly authStrategy: AuthenticationStrategy; private readonly httpAuth: HttpAuthService; @@ -154,7 +157,8 @@ export class KubernetesProxy { if (!middleware) { const logger = this.logger.child({ cluster: originalCluster.name }); middleware = createProxyMiddleware({ - logProvider: () => logger, + // TODO: Add 'log' to LoggerService + logProvider: () => loggerToWinstonLogger(logger), ws: true, secure: !originalCluster.skipTLSVerify, changeOrigin: true, @@ -212,7 +216,7 @@ export class KubernetesProxy { error, ); - logger.error(wrappedError); + logger.error('Kubernetes proxy error', wrappedError); const body: ErrorResponseBody = { error: serializeError(wrappedError, { diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index c34fad6d39..a6eae1f279 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -17,7 +17,7 @@ import { Config } from '@backstage/config'; import type { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import * as k8sTypes from '@backstage/plugin-kubernetes-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * @@ -34,7 +34,7 @@ export type ServiceLocatorMethod = * @public */ export interface KubernetesObjectsProviderOptions { - logger: Logger; + logger: LoggerService; config: Config; fetcher: k8sTypes.KubernetesFetcher; serviceLocator: k8sTypes.KubernetesServiceLocator; diff --git a/plugins/kubernetes-react/.eslintrc.js b/plugins/kubernetes-react/.eslintrc.js index e2a53a6ad2..e487f765b2 100644 --- a/plugins/kubernetes-react/.eslintrc.js +++ b/plugins/kubernetes-react/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/kubernetes-react/src/components/Cluster/Cluster.tsx b/plugins/kubernetes-react/src/components/Cluster/Cluster.tsx index d713b9a873..76661d5a47 100644 --- a/plugins/kubernetes-react/src/components/Cluster/Cluster.tsx +++ b/plugins/kubernetes-react/src/components/Cluster/Cluster.tsx @@ -15,13 +15,11 @@ */ import React from 'react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Grid, - Typography, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import { ClientPodStatus, ClusterObjects, diff --git a/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsAccordions.tsx b/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsAccordions.tsx index e724c14fdf..7f718ea466 100644 --- a/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsAccordions.tsx +++ b/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsAccordions.tsx @@ -14,13 +14,11 @@ * limitations under the License. */ import React, { useContext } from 'react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Grid, - Typography, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { V1CronJob, V1Job } from '@kubernetes/client-node'; import { JobsAccordions } from '../JobsAccordions'; diff --git a/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsDrawer.tsx b/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsDrawer.tsx index 45242af307..818108fc42 100644 --- a/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsDrawer.tsx +++ b/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsDrawer.tsx @@ -16,7 +16,9 @@ import React from 'react'; import { V1CronJob } from '@kubernetes/client-node'; import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; -import { Typography, Grid, Chip } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; +import Chip from '@material-ui/core/Chip'; export const CronJobDrawer = ({ cronJob, diff --git a/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/Rollout.tsx b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/Rollout.tsx index 91039ec314..65749c2ea2 100644 --- a/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/Rollout.tsx +++ b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/Rollout.tsx @@ -15,13 +15,11 @@ */ import React, { useContext } from 'react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Grid, - Typography, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { V1Pod, V1HorizontalPodAutoscaler } from '@kubernetes/client-node'; import { PodsTable } from '../../Pods'; diff --git a/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx index 150f3bc186..304c8bdf78 100644 --- a/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx +++ b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx @@ -16,7 +16,8 @@ import React from 'react'; import { KubernetesStructuredMetadataTableDrawer } from '../../KubernetesDrawer'; -import { Typography, Grid } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; export const RolloutDrawer = ({ rollout, diff --git a/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/StepsProgress.tsx b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/StepsProgress.tsx index c93ab41d1d..8885877e09 100644 --- a/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/StepsProgress.tsx +++ b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/StepsProgress.tsx @@ -15,7 +15,9 @@ */ import React from 'react'; -import { Step, StepLabel, Stepper } from '@material-ui/core'; +import Step from '@material-ui/core/Step'; +import StepLabel from '@material-ui/core/StepLabel'; +import Stepper from '@material-ui/core/Stepper'; import Typography from '@material-ui/core/Typography'; import { ArgoRolloutCanaryStep, diff --git a/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.tsx b/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.tsx index 22629a1d6e..ee484ecda8 100644 --- a/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.tsx +++ b/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.tsx @@ -15,12 +15,10 @@ */ import React from 'react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Grid, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Grid from '@material-ui/core/Grid'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { DefaultCustomResourceDrawer } from './DefaultCustomResourceDrawer'; import { StructuredMetadataTable } from '@backstage/core-components'; diff --git a/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResourceDrawer.tsx b/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResourceDrawer.tsx index 82dcd0746f..ccbc4b41ca 100644 --- a/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResourceDrawer.tsx +++ b/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResourceDrawer.tsx @@ -16,7 +16,8 @@ import React from 'react'; import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; -import { Typography, Grid } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; const capitalize = (str: string) => str.charAt(0).toLocaleUpperCase('en-US') + str.slice(1); diff --git a/plugins/kubernetes-react/src/components/DaemonSetsAccordions/DaemonSetsAccordions.tsx b/plugins/kubernetes-react/src/components/DaemonSetsAccordions/DaemonSetsAccordions.tsx index 834a86e837..cd9c0b8702 100644 --- a/plugins/kubernetes-react/src/components/DaemonSetsAccordions/DaemonSetsAccordions.tsx +++ b/plugins/kubernetes-react/src/components/DaemonSetsAccordions/DaemonSetsAccordions.tsx @@ -15,12 +15,10 @@ */ import React, { useContext } from 'react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Grid, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Grid from '@material-ui/core/Grid'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { V1Pod, V1DaemonSet } from '@kubernetes/client-node'; import { PodsTable } from '../Pods'; diff --git a/plugins/kubernetes-react/src/components/DaemonSetsAccordions/DaemonSetsDrawer.tsx b/plugins/kubernetes-react/src/components/DaemonSetsAccordions/DaemonSetsDrawer.tsx index e0f64ed679..c03fb5bace 100644 --- a/plugins/kubernetes-react/src/components/DaemonSetsAccordions/DaemonSetsDrawer.tsx +++ b/plugins/kubernetes-react/src/components/DaemonSetsAccordions/DaemonSetsDrawer.tsx @@ -17,7 +17,9 @@ import React from 'react'; import { V1DaemonSet } from '@kubernetes/client-node'; import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; -import { Typography, Grid, Chip } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; +import Chip from '@material-ui/core/Chip'; export const DaemonSetDrawer = ({ daemonset, diff --git a/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.tsx b/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.tsx index 0fc8463f73..aff771a349 100644 --- a/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.tsx +++ b/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.tsx @@ -18,7 +18,9 @@ import React from 'react'; import { V1Deployment } from '@kubernetes/client-node'; import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; import { renderCondition } from '../../utils/pod'; -import { Typography, Grid, Chip } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; +import Chip from '@material-ui/core/Chip'; export const DeploymentDrawer = ({ deployment, diff --git a/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentsAccordions.tsx b/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentsAccordions.tsx index 8432b9d133..3d048f22df 100644 --- a/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentsAccordions.tsx +++ b/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentsAccordions.tsx @@ -15,13 +15,11 @@ */ import React, { useContext } from 'react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Grid, - Typography, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { V1Deployment, diff --git a/plugins/kubernetes-react/src/components/ErrorPanel/ErrorPanel.tsx b/plugins/kubernetes-react/src/components/ErrorPanel/ErrorPanel.tsx index 7109849b8e..58832b553c 100644 --- a/plugins/kubernetes-react/src/components/ErrorPanel/ErrorPanel.tsx +++ b/plugins/kubernetes-react/src/components/ErrorPanel/ErrorPanel.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import { ClusterObjects } from '@backstage/plugin-kubernetes-common'; import { WarningPanel } from '@backstage/core-components'; diff --git a/plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.tsx b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.tsx index 5881f6d6c4..0590546bbd 100644 --- a/plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.tsx +++ b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.tsx @@ -17,7 +17,8 @@ import React from 'react'; import { V1Ingress } from '@kubernetes/client-node'; import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; -import { Typography, Grid } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; export const IngressDrawer = ({ ingress, diff --git a/plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.tsx b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.tsx index 28aa5d42e4..5962e78f59 100644 --- a/plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.tsx +++ b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.tsx @@ -15,12 +15,10 @@ */ import React, { useContext } from 'react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Grid, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Grid from '@material-ui/core/Grid'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { V1Ingress } from '@kubernetes/client-node'; import { IngressDrawer } from './IngressDrawer'; diff --git a/plugins/kubernetes-react/src/components/JobsAccordions/JobsAccordions.tsx b/plugins/kubernetes-react/src/components/JobsAccordions/JobsAccordions.tsx index 460d0b80c0..894c273528 100644 --- a/plugins/kubernetes-react/src/components/JobsAccordions/JobsAccordions.tsx +++ b/plugins/kubernetes-react/src/components/JobsAccordions/JobsAccordions.tsx @@ -14,12 +14,10 @@ * limitations under the License. */ import React, { useContext } from 'react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Grid, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Grid from '@material-ui/core/Grid'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { V1Job, V1Pod } from '@kubernetes/client-node'; import { PodsTable } from '../Pods'; diff --git a/plugins/kubernetes-react/src/components/JobsAccordions/JobsDrawer.tsx b/plugins/kubernetes-react/src/components/JobsAccordions/JobsDrawer.tsx index c60153e77f..c001a0fd73 100644 --- a/plugins/kubernetes-react/src/components/JobsAccordions/JobsDrawer.tsx +++ b/plugins/kubernetes-react/src/components/JobsAccordions/JobsDrawer.tsx @@ -16,7 +16,8 @@ import React from 'react'; import { V1Job } from '@kubernetes/client-node'; import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; -import { Typography, Grid } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; export const JobDrawer = ({ job, diff --git a/plugins/kubernetes-react/src/components/KubernetesDialog/KubernetesDialog.tsx b/plugins/kubernetes-react/src/components/KubernetesDialog/KubernetesDialog.tsx index cd5802f464..fa5c1906b7 100644 --- a/plugins/kubernetes-react/src/components/KubernetesDialog/KubernetesDialog.tsx +++ b/plugins/kubernetes-react/src/components/KubernetesDialog/KubernetesDialog.tsx @@ -14,16 +14,12 @@ * limitations under the License. */ -import { - Button, - Dialog, - DialogContent, - DialogTitle, - IconButton, - Theme, - createStyles, - makeStyles, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Dialog from '@material-ui/core/Dialog'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import IconButton from '@material-ui/core/IconButton'; +import { Theme, createStyles, makeStyles } from '@material-ui/core/styles'; import CloseIcon from '@material-ui/icons/Close'; import React, { useState } from 'react'; diff --git a/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesDrawer.tsx b/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesDrawer.tsx index 598dac4fe8..b27e628508 100644 --- a/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesDrawer.tsx +++ b/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesDrawer.tsx @@ -16,19 +16,19 @@ import React, { ChangeEvent, useState } from 'react'; import { IObjectMeta } from '@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta'; +import Drawer from '@material-ui/core/Drawer'; +import Grid from '@material-ui/core/Grid'; +import IconButton from '@material-ui/core/IconButton'; +import Switch from '@material-ui/core/Switch'; +import Typography from '@material-ui/core/Typography'; +import Button from '@material-ui/core/Button'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; import { createStyles, - Drawer, makeStyles, Theme, - Grid, - IconButton, - Switch, - Typography, - Button, withStyles, - FormControlLabel, -} from '@material-ui/core'; +} from '@material-ui/core/styles'; import CloseIcon from '@material-ui/icons/Close'; import { ManifestYaml } from './ManifestYaml'; diff --git a/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx b/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx index 7f6cc4f65e..b31d3f9aa7 100644 --- a/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx +++ b/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx @@ -15,18 +15,14 @@ */ import React, { ChangeEvent, useContext, useState } from 'react'; -import { - Button, - Typography, - makeStyles, - IconButton, - createStyles, - Theme, - Drawer, - Switch, - FormControlLabel, - Grid, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Typography from '@material-ui/core/Typography'; +import IconButton from '@material-ui/core/IconButton'; +import Drawer from '@material-ui/core/Drawer'; +import Switch from '@material-ui/core/Switch'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import Grid from '@material-ui/core/Grid'; +import { makeStyles, createStyles, Theme } from '@material-ui/core/styles'; import Close from '@material-ui/icons/Close'; import OpenInNewIcon from '@material-ui/icons/OpenInNew'; import { V1ObjectMeta } from '@kubernetes/client-node'; diff --git a/plugins/kubernetes-react/src/components/KubernetesDrawer/ManifestYaml.tsx b/plugins/kubernetes-react/src/components/KubernetesDrawer/ManifestYaml.tsx index 246477b53b..5090badfcd 100644 --- a/plugins/kubernetes-react/src/components/KubernetesDrawer/ManifestYaml.tsx +++ b/plugins/kubernetes-react/src/components/KubernetesDrawer/ManifestYaml.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ import { CodeSnippet } from '@backstage/core-components'; -import { FormControlLabel, Switch } from '@material-ui/core'; +import FormControlLabel from '@material-ui/core/FormControlLabel'; +import Switch from '@material-ui/core/Switch'; import jsyaml from 'js-yaml'; import React, { useState } from 'react'; diff --git a/plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminal.tsx b/plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminal.tsx index d8c9b0dc02..3510670a05 100644 --- a/plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminal.tsx +++ b/plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminal.tsx @@ -17,7 +17,7 @@ import 'xterm/css/xterm.css'; import { discoveryApiRef, useApi } from '@backstage/core-plugin-api'; import { ClusterAttributes } from '@backstage/plugin-kubernetes-common'; -import { createStyles, makeStyles, Theme } from '@material-ui/core'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import React, { useEffect, useMemo, useState } from 'react'; import { Terminal } from 'xterm'; import { FitAddon } from 'xterm-addon-fit'; diff --git a/plugins/kubernetes-react/src/components/Pods/ErrorList/ErrorList.tsx b/plugins/kubernetes-react/src/components/Pods/ErrorList/ErrorList.tsx index 3c964b46d7..6131c7aa16 100644 --- a/plugins/kubernetes-react/src/components/Pods/ErrorList/ErrorList.tsx +++ b/plugins/kubernetes-react/src/components/Pods/ErrorList/ErrorList.tsx @@ -15,17 +15,13 @@ */ import React from 'react'; -import { - List, - ListItem, - ListItemText, - Divider, - createStyles, - makeStyles, - Theme, - Paper, - Grid, -} from '@material-ui/core'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import Divider from '@material-ui/core/Divider'; +import Paper from '@material-ui/core/Paper'; +import Grid from '@material-ui/core/Grid'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import { PodAndErrors } from '../types'; import { FixDialog } from '../FixDialog/FixDialog'; diff --git a/plugins/kubernetes-react/src/components/Pods/Events/Events.tsx b/plugins/kubernetes-react/src/components/Pods/Events/Events.tsx index 9f888d182c..6a43b2fe5b 100644 --- a/plugins/kubernetes-react/src/components/Pods/Events/Events.tsx +++ b/plugins/kubernetes-react/src/components/Pods/Events/Events.tsx @@ -15,24 +15,22 @@ */ import React from 'react'; -import { - Avatar, - Container, - Grid, - List, - ListItem, - ListItemAvatar, - ListItemText, - Tooltip, - Typography, -} from '@material-ui/core'; +import Avatar from '@material-ui/core/Avatar'; +import Container from '@material-ui/core/Container'; +import Grid from '@material-ui/core/Grid'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemAvatar from '@material-ui/core/ListItemAvatar'; +import ListItemText from '@material-ui/core/ListItemText'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; import InfoIcon from '@material-ui/icons/Info'; import WarningIcon from '@material-ui/icons/Warning'; import { DateTime } from 'luxon'; import { useEvents } from './useEvents'; -import { Skeleton } from '@material-ui/lab'; +import Skeleton from '@material-ui/lab/Skeleton'; import { DismissableBanner } from '@backstage/core-components'; import { Event } from 'kubernetes-models/v1'; diff --git a/plugins/kubernetes-react/src/components/Pods/FixDialog/FixDialog.tsx b/plugins/kubernetes-react/src/components/Pods/FixDialog/FixDialog.tsx index d0f3e74c14..fd7440870f 100644 --- a/plugins/kubernetes-react/src/components/Pods/FixDialog/FixDialog.tsx +++ b/plugins/kubernetes-react/src/components/Pods/FixDialog/FixDialog.tsx @@ -15,7 +15,8 @@ */ import React, { useState } from 'react'; -import { Button, Grid } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Grid from '@material-ui/core/Grid'; import Dialog from '@material-ui/core/Dialog'; import DialogActions from '@material-ui/core/DialogActions'; import DialogContent from '@material-ui/core/DialogContent'; diff --git a/plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.tsx b/plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.tsx index 746abbd668..cabda69b2c 100644 --- a/plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.tsx +++ b/plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.tsx @@ -15,14 +15,12 @@ */ import { StructuredMetadataTable } from '@backstage/core-components'; import { ClientContainerStatus } from '@backstage/plugin-kubernetes-common'; -import { - Card, - CardActions, - CardContent, - CardHeader, - Grid, - Typography, -} from '@material-ui/core'; +import Card from '@material-ui/core/Card'; +import CardActions from '@material-ui/core/CardActions'; +import CardContent from '@material-ui/core/CardContent'; +import CardHeader from '@material-ui/core/CardHeader'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import { IContainer, IContainerStatus } from 'kubernetes-models/v1'; import { DateTime } from 'luxon'; import React from 'react'; diff --git a/plugins/kubernetes-react/src/components/Pods/PodDrawer/PendingPodContent.tsx b/plugins/kubernetes-react/src/components/Pods/PodDrawer/PendingPodContent.tsx index fb0dbe9b9c..703930498a 100644 --- a/plugins/kubernetes-react/src/components/Pods/PodDrawer/PendingPodContent.tsx +++ b/plugins/kubernetes-react/src/components/Pods/PodDrawer/PendingPodContent.tsx @@ -14,7 +14,10 @@ * limitations under the License. */ import React from 'react'; -import { Grid, List, ListItem, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import Typography from '@material-ui/core/Typography'; import { IPodCondition, Pod } from 'kubernetes-models/v1'; import { StatusError, diff --git a/plugins/kubernetes-react/src/components/Pods/PodDrawer/PodDrawer.tsx b/plugins/kubernetes-react/src/components/Pods/PodDrawer/PodDrawer.tsx index e8545a005b..7a7b17b7f6 100644 --- a/plugins/kubernetes-react/src/components/Pods/PodDrawer/PodDrawer.tsx +++ b/plugins/kubernetes-react/src/components/Pods/PodDrawer/PodDrawer.tsx @@ -17,13 +17,9 @@ import React from 'react'; import { ItemCardGrid } from '@backstage/core-components'; -import { - createStyles, - makeStyles, - Theme, - Grid, - Typography, -} from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; import { Pod } from 'kubernetes-models/v1'; diff --git a/plugins/kubernetes-react/src/components/Pods/PodLogs/PodLogs.tsx b/plugins/kubernetes-react/src/components/Pods/PodLogs/PodLogs.tsx index 5c08de047c..a66d5ec47e 100644 --- a/plugins/kubernetes-react/src/components/Pods/PodLogs/PodLogs.tsx +++ b/plugins/kubernetes-react/src/components/Pods/PodLogs/PodLogs.tsx @@ -20,8 +20,8 @@ import { EmptyState, LogViewer, } from '@backstage/core-components'; -import { Paper } from '@material-ui/core'; -import { Skeleton } from '@material-ui/lab'; +import Paper from '@material-ui/core/Paper'; +import Skeleton from '@material-ui/lab/Skeleton'; import { ContainerScope } from './types'; import { usePodLogs } from './usePodLogs'; diff --git a/plugins/kubernetes-react/src/components/Pods/PodsTable.tsx b/plugins/kubernetes-react/src/components/Pods/PodsTable.tsx index d9a7657367..51acef848d 100644 --- a/plugins/kubernetes-react/src/components/Pods/PodsTable.tsx +++ b/plugins/kubernetes-react/src/components/Pods/PodsTable.tsx @@ -29,7 +29,7 @@ import { useMatchingErrors } from '../../hooks/useMatchingErrors'; import { Pod } from 'kubernetes-models/v1/Pod'; import { V1Pod } from '@kubernetes/client-node'; import { usePodMetrics } from '../../hooks/usePodMetrics'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; /** * diff --git a/plugins/kubernetes-react/src/components/ResourceUtilization/ResourceUtilization.tsx b/plugins/kubernetes-react/src/components/ResourceUtilization/ResourceUtilization.tsx index 15f906e469..c794ae3381 100644 --- a/plugins/kubernetes-react/src/components/ResourceUtilization/ResourceUtilization.tsx +++ b/plugins/kubernetes-react/src/components/ResourceUtilization/ResourceUtilization.tsx @@ -13,7 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Grid, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import React from 'react'; import { GaugePropsGetColor, LinearGauge } from '@backstage/core-components'; diff --git a/plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.tsx b/plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.tsx index 9588cd00ed..c5392a3e3c 100644 --- a/plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.tsx +++ b/plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.tsx @@ -17,7 +17,8 @@ import React from 'react'; import { V1Service } from '@kubernetes/client-node'; import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; -import { Typography, Grid } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; export const ServiceDrawer = ({ service, diff --git a/plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.tsx b/plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.tsx index 50d6ec6f3e..71832fd35c 100644 --- a/plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.tsx +++ b/plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.tsx @@ -15,13 +15,11 @@ */ import React, { useContext } from 'react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Grid, - Typography, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { V1Service } from '@kubernetes/client-node'; import { ServiceDrawer } from './ServiceDrawer'; diff --git a/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx b/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx index e07a5f426c..6f776bc1d6 100644 --- a/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx +++ b/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx @@ -18,7 +18,9 @@ import React from 'react'; import { V1StatefulSet } from '@kubernetes/client-node'; import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; import { renderCondition } from '../../utils/pod'; -import { Typography, Grid, Chip } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; +import Chip from '@material-ui/core/Chip'; export const StatefulSetDrawer = ({ statefulset, diff --git a/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetsAccordions.tsx b/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetsAccordions.tsx index 37bb76c84e..00f08c3c98 100644 --- a/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetsAccordions.tsx +++ b/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetsAccordions.tsx @@ -15,13 +15,11 @@ */ import React, { useContext } from 'react'; -import { - Accordion, - AccordionDetails, - AccordionSummary, - Grid, - Typography, -} from '@material-ui/core'; +import Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { V1Pod, diff --git a/plugins/kubernetes-react/src/utils/pod.tsx b/plugins/kubernetes-react/src/utils/pod.tsx index 1123f11427..498d5c9802 100644 --- a/plugins/kubernetes-react/src/utils/pod.tsx +++ b/plugins/kubernetes-react/src/utils/pod.tsx @@ -20,7 +20,7 @@ import { V1DeploymentCondition, } from '@kubernetes/client-node'; import React, { Fragment, ReactNode } from 'react'; -import { Chip } from '@material-ui/core'; +import Chip from '@material-ui/core/Chip'; import { StatusAborted, StatusError, diff --git a/plugins/lighthouse-backend/api-report.md b/plugins/lighthouse-backend/api-report.md index 44379d6569..c39f7a9c28 100644 --- a/plugins/lighthouse-backend/api-report.md +++ b/plugins/lighthouse-backend/api-report.md @@ -8,7 +8,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; import { DiscoveryService } from '@backstage/backend-plugin-api'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { TokenManager } from '@backstage/backend-common'; @@ -23,7 +23,7 @@ export interface CreateLighthouseSchedulerOptions { // (undocumented) discovery: DiscoveryService; // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) scheduler?: PluginTaskScheduler; // (undocumented) diff --git a/plugins/lighthouse-backend/src/plugin.ts b/plugins/lighthouse-backend/src/plugin.ts index 6a36e3f189..e68d6a6d26 100644 --- a/plugins/lighthouse-backend/src/plugin.ts +++ b/plugins/lighthouse-backend/src/plugin.ts @@ -14,10 +14,9 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { - createBackendPlugin, coreServices, + createBackendPlugin, } from '@backstage/backend-plugin-api'; import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha'; @@ -50,12 +49,10 @@ export const lighthousePlugin = createBackendPlugin({ discovery, auth, }) { - const winstonLogger = loggerToWinstonLogger(logger); - await createScheduler({ catalogClient, config, - logger: winstonLogger, + logger, scheduler, tokenManager, discovery, diff --git a/plugins/lighthouse-backend/src/service/createScheduler.ts b/plugins/lighthouse-backend/src/service/createScheduler.ts index 6f0ef497a5..52f586a497 100644 --- a/plugins/lighthouse-backend/src/service/createScheduler.ts +++ b/plugins/lighthouse-backend/src/service/createScheduler.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { CATALOG_FILTER_EXISTS, CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; @@ -22,14 +21,18 @@ import { LighthouseRestApi } from '@backstage/plugin-lighthouse-common'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { LighthouseAuditScheduleImpl } from '../config'; import { - TokenManager, createLegacyAuthAdapters, + TokenManager, } from '@backstage/backend-common'; -import { AuthService, DiscoveryService } from '@backstage/backend-plugin-api'; +import { + AuthService, + DiscoveryService, + LoggerService, +} from '@backstage/backend-plugin-api'; /** @public **/ export interface CreateLighthouseSchedulerOptions { - logger: Logger; + logger: LoggerService; config: Config; discovery: DiscoveryService; scheduler?: PluginTaskScheduler; diff --git a/plugins/linguist-backend/api-report.md b/plugins/linguist-backend/api-report.md index 31892fcdb1..e59b1229f7 100644 --- a/plugins/linguist-backend/api-report.md +++ b/plugins/linguist-backend/api-report.md @@ -15,7 +15,7 @@ import { HttpAuthService } from '@backstage/backend-plugin-api'; import { HumanDuration } from '@backstage/types'; import { Languages } from '@backstage/plugin-linguist-common'; import { LanguageType } from '@backstage/plugin-linguist-common'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; @@ -74,7 +74,7 @@ export interface LinguistTagsProcessorOptions { languageMap?: Record; languageTypes?: LanguageType[]; // (undocumented) - logger: Logger; + logger: LoggerService; shouldProcessEntity?: ShouldProcessEntity; } @@ -109,7 +109,7 @@ export interface RouterOptions { // (undocumented) linguistBackendApi?: LinguistBackendApi; // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) reader: UrlReader; // (undocumented) diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index 993c6d498f..1e933300b1 100644 --- a/plugins/linguist-backend/package.json +++ b/plugins/linguist-backend/package.json @@ -52,7 +52,6 @@ "luxon": "^3.0.0", "node-fetch": "^2.6.7", "uuid": "^9.0.0", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/linguist-backend/src/api/LinguistBackendClient.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.ts index d2c2a9124a..23236f5f85 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendClient.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendClient.ts @@ -19,18 +19,17 @@ import { EntityResults, Language, Languages, + LINGUIST_ANNOTATION, } from '@backstage/plugin-linguist-common'; import { CATALOG_FILTER_EXISTS, - GetEntitiesRequest, CatalogApi, + GetEntitiesRequest, } from '@backstage/catalog-client'; import { UrlReader } from '@backstage/backend-common'; import { DateTime } from 'luxon'; -import { LINGUIST_ANNOTATION } from '@backstage/plugin-linguist-common'; import { LinguistBackendStore } from '../db'; -import { Logger } from 'winston'; import fs from 'fs-extra'; import linguist from 'linguist-js'; import { @@ -40,7 +39,7 @@ import { import { assertError } from '@backstage/errors'; import { HumanDuration } from '@backstage/types'; import { Results } from 'linguist-js/dist/types'; -import { type AuthService } from '@backstage/backend-plugin-api'; +import { type AuthService, LoggerService } from '@backstage/backend-plugin-api'; /** @public */ export interface LinguistBackendApi { @@ -50,7 +49,7 @@ export interface LinguistBackendApi { /** @public */ export class LinguistBackendClient implements LinguistBackendApi { - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly store: LinguistBackendStore; private readonly urlReader: UrlReader; private readonly auth: AuthService; @@ -62,7 +61,7 @@ export class LinguistBackendClient implements LinguistBackendApi { private readonly kind: string[]; private readonly linguistJsOptions?: Record; public constructor( - logger: Logger, + logger: LoggerService, store: LinguistBackendStore, urlReader: UrlReader, auth: AuthService, diff --git a/plugins/linguist-backend/src/plugin.ts b/plugins/linguist-backend/src/plugin.ts index e6de4297ad..1a64a10773 100644 --- a/plugins/linguist-backend/src/plugin.ts +++ b/plugins/linguist-backend/src/plugin.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -59,7 +58,7 @@ export const linguistPlugin = createBackendPlugin({ await createRouterFromConfig({ auth, httpAuth, - logger: loggerToWinstonLogger(logger), + logger, config, reader, database, diff --git a/plugins/linguist-backend/src/processor/LinguistTagsProcessor.ts b/plugins/linguist-backend/src/processor/LinguistTagsProcessor.ts index b27fe2c5e9..456de3809f 100644 --- a/plugins/linguist-backend/src/processor/LinguistTagsProcessor.ts +++ b/plugins/linguist-backend/src/processor/LinguistTagsProcessor.ts @@ -19,11 +19,10 @@ import { CatalogProcessor, CatalogProcessorCache, } from '@backstage/plugin-catalog-node'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; +import { DiscoveryService, LoggerService } from '@backstage/backend-plugin-api'; import { Languages, LanguageType } from '@backstage/plugin-linguist-common'; import fetch from 'node-fetch'; -import { Logger } from 'winston'; -import { HumanDuration, durationToMilliseconds } from '@backstage/types'; +import { durationToMilliseconds, HumanDuration } from '@backstage/types'; import { Config } from '@backstage/config'; /** @@ -43,7 +42,7 @@ interface CachedData { * @public */ export interface LinguistTagsProcessorOptions { - logger: Logger; + logger: LoggerService; discovery: DiscoveryService; /** * Optional map that gives full control over which linguist languages should be included as tags and @@ -84,7 +83,7 @@ export interface LinguistTagsProcessorOptions { * @public * */ export class LinguistTagsProcessor implements CatalogProcessor { - private logger: Logger; + private logger: LoggerService; private discovery: DiscoveryService; private loggerMeta = { plugin: 'LinguistTagsProcessor' }; private languageMap: Record = {}; diff --git a/plugins/linguist-backend/src/service/router.ts b/plugins/linguist-backend/src/service/router.ts index 7d64edc82e..ec2494b166 100644 --- a/plugins/linguist-backend/src/service/router.ts +++ b/plugins/linguist-backend/src/service/router.ts @@ -24,7 +24,6 @@ import { } from '@backstage/backend-common'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { LinguistBackendApi } from '../api'; import { LinguistBackendDatabase } from '../db'; import { @@ -36,7 +35,11 @@ import { HumanDuration } from '@backstage/types'; import { CatalogClient } from '@backstage/catalog-client'; import { LinguistBackendClient } from '../api/LinguistBackendClient'; import { Config } from '@backstage/config'; -import { AuthService, HttpAuthService } from '@backstage/backend-plugin-api'; +import { + AuthService, + HttpAuthService, + LoggerService, +} from '@backstage/backend-plugin-api'; /** @public */ export interface PluginOptions { @@ -51,7 +54,7 @@ export interface PluginOptions { /** @public */ export interface RouterOptions { linguistBackendApi?: LinguistBackendApi; - logger: Logger; + logger: LoggerService; reader: UrlReader; tokenManager: TokenManager; database: PluginDatabaseManager; diff --git a/plugins/linguist-backend/src/service/standaloneServer.ts b/plugins/linguist-backend/src/service/standaloneServer.ts index 518efed6a0..d7e02967a4 100644 --- a/plugins/linguist-backend/src/service/standaloneServer.ts +++ b/plugins/linguist-backend/src/service/standaloneServer.ts @@ -16,22 +16,22 @@ import { createServiceBuilder, - loadBackendConfig, - HostDiscovery, - UrlReaders, - ServerTokenManager, DatabaseManager, + HostDiscovery, + loadBackendConfig, + ServerTokenManager, + UrlReaders, } from '@backstage/backend-common'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; import { TaskScheduleDefinition } from '@backstage/backend-tasks'; import { ConfigReader } from '@backstage/config'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/nomad-backend/api-report.md b/plugins/nomad-backend/api-report.md index 82bb823d2d..7476fde961 100644 --- a/plugins/nomad-backend/api-report.md +++ b/plugins/nomad-backend/api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; import { Config } from '@backstage/config'; import express from 'express'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; // @public (undocumented) export function createRouter(options: RouterOptions): Promise; @@ -20,7 +20,7 @@ export interface RouterOptions { // (undocumented) config: Config; // (undocumented) - logger: Logger; + logger: LoggerService; } // (No @packageDocumentation comment for this package) diff --git a/plugins/nomad-backend/package.json b/plugins/nomad-backend/package.json index 86024177a8..115071563d 100644 --- a/plugins/nomad-backend/package.json +++ b/plugins/nomad-backend/package.json @@ -39,7 +39,6 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "node-fetch": "^2.6.7", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/nomad-backend/src/plugin.ts b/plugins/nomad-backend/src/plugin.ts index 3c6a34f5fa..551f42cdc7 100644 --- a/plugins/nomad-backend/src/plugin.ts +++ b/plugins/nomad-backend/src/plugin.ts @@ -14,10 +14,9 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { - createBackendPlugin, coreServices, + createBackendPlugin, } from '@backstage/backend-plugin-api'; import { createRouter } from './service/router'; @@ -36,13 +35,12 @@ export const nomadPlugin = createBackendPlugin({ httpRouter: coreServices.httpRouter, }, async init({ logger, config, httpRouter }) { - const winstonLogger = loggerToWinstonLogger(logger); httpRouter.use( await createRouter({ /** * Logger for logging purposes */ - logger: winstonLogger, + logger, config, }), ); diff --git a/plugins/nomad-backend/src/service/router.ts b/plugins/nomad-backend/src/service/router.ts index d6b5aa1fc6..10dd4a4128 100644 --- a/plugins/nomad-backend/src/service/router.ts +++ b/plugins/nomad-backend/src/service/router.ts @@ -20,11 +20,11 @@ import { Config } from '@backstage/config'; import { InputError } from '@backstage/errors'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** @public */ export interface RouterOptions { - logger: Logger; + logger: LoggerService; config: Config; } diff --git a/plugins/nomad-backend/src/service/standaloneServer.ts b/plugins/nomad-backend/src/service/standaloneServer.ts index 133577ffc2..3d952ec294 100644 --- a/plugins/nomad-backend/src/service/standaloneServer.ts +++ b/plugins/nomad-backend/src/service/standaloneServer.ts @@ -15,14 +15,14 @@ */ import { createServiceBuilder } from '@backstage/backend-common'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; import { Config } from '@backstage/config'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { config: Config; enableCors: boolean; - logger: Logger; + logger: LoggerService; port: number; } diff --git a/plugins/periskop-backend/api-report.md b/plugins/periskop-backend/api-report.md index caaed109f9..6b846db055 100644 --- a/plugins/periskop-backend/api-report.md +++ b/plugins/periskop-backend/api-report.md @@ -5,7 +5,7 @@ ```ts import { Config } from '@backstage/config'; import express from 'express'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; // @public (undocumented) export function createRouter(options: RouterOptions): Promise; @@ -15,7 +15,7 @@ export interface RouterOptions { // (undocumented) config: Config; // (undocumented) - logger: Logger; + logger: LoggerService; } // (No @packageDocumentation comment for this package) diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index 82786076cf..1ada4559fe 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -52,7 +52,6 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "node-fetch": "^2.6.7", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/periskop-backend/src/alpha.ts b/plugins/periskop-backend/src/alpha.ts index c18e0dc87d..6e41f8a05d 100644 --- a/plugins/periskop-backend/src/alpha.ts +++ b/plugins/periskop-backend/src/alpha.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -36,9 +35,7 @@ export default createBackendPlugin({ httpRouter: coreServices.httpRouter, }, async init({ config, logger, httpRouter }) { - httpRouter.use( - await createRouter({ config, logger: loggerToWinstonLogger(logger) }), - ); + httpRouter.use(await createRouter({ config, logger })); httpRouter.addAuthPolicy({ allow: 'unauthenticated', path: '/health', diff --git a/plugins/periskop-backend/src/service/router.ts b/plugins/periskop-backend/src/service/router.ts index 38a43c5050..65f15041e5 100644 --- a/plugins/periskop-backend/src/service/router.ts +++ b/plugins/periskop-backend/src/service/router.ts @@ -17,15 +17,15 @@ import { errorHandler } from '@backstage/backend-common'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { PeriskopApi } from '../api/index'; import { Config } from '@backstage/config'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * @public */ export interface RouterOptions { - logger: Logger; + logger: LoggerService; config: Config; } diff --git a/plugins/periskop-backend/src/service/standaloneServer.ts b/plugins/periskop-backend/src/service/standaloneServer.ts index 635b139ccf..e345a5c87c 100644 --- a/plugins/periskop-backend/src/service/standaloneServer.ts +++ b/plugins/periskop-backend/src/service/standaloneServer.ts @@ -19,13 +19,13 @@ import { loadBackendConfig, } from '@backstage/backend-common'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/permission-backend/api-report.md b/plugins/permission-backend/api-report.md index 8b4336ff23..d8d40be440 100644 --- a/plugins/permission-backend/api-report.md +++ b/plugins/permission-backend/api-report.md @@ -9,7 +9,7 @@ import { DiscoveryService } from '@backstage/backend-plugin-api'; import express from 'express'; import { HttpAuthService } from '@backstage/backend-plugin-api'; import { IdentityApi } from '@backstage/plugin-auth-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PermissionPolicy } from '@backstage/plugin-permission-node'; import { UserInfoService } from '@backstage/backend-plugin-api'; @@ -29,7 +29,7 @@ export interface RouterOptions { // (undocumented) identity?: IdentityApi; // (undocumented) - logger: Logger; + logger: LoggerService; // (undocumented) policy: PermissionPolicy; // (undocumented) diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index a684d0d459..ce73675788 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -57,7 +57,6 @@ "express-promise-router": "^4.1.0", "lodash": "^4.17.21", "node-fetch": "^2.6.7", - "winston": "^3.2.1", "yn": "^4.0.0", "zod": "^3.22.4" }, diff --git a/plugins/permission-backend/src/plugin.ts b/plugins/permission-backend/src/plugin.ts index 28555b1836..f0130e4812 100644 --- a/plugins/permission-backend/src/plugin.ts +++ b/plugins/permission-backend/src/plugin.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -68,7 +67,6 @@ export const permissionPlugin = createBackendPlugin({ httpAuth, userInfo, }) { - const winstonLogger = loggerToWinstonLogger(logger); if (!policies.policy) { throw new Error( 'No policy module installed! Please install a policy module. If you want to allow all requests, use @backstage/plugin-permission-backend-module-allow-all-policy permissionModuleAllowAllPolicy', @@ -79,7 +77,7 @@ export const permissionPlugin = createBackendPlugin({ await createRouter({ config, discovery, - logger: winstonLogger, + logger, policy: policies.policy, auth, httpAuth, diff --git a/plugins/permission-backend/src/service/router.ts b/plugins/permission-backend/src/service/router.ts index cd7c71fd87..cc45d0b41a 100644 --- a/plugins/permission-backend/src/service/router.ts +++ b/plugins/permission-backend/src/service/router.ts @@ -17,7 +17,6 @@ import { z } from 'zod'; import express, { Request, Response } from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { createLegacyAuthAdapters, errorHandler, @@ -29,11 +28,11 @@ import { } from '@backstage/plugin-auth-node'; import { AuthorizeResult, - EvaluatePermissionResponse, EvaluatePermissionRequest, - IdentifiedPermissionMessage, EvaluatePermissionRequestBatch, + EvaluatePermissionResponse, EvaluatePermissionResponseBatch, + IdentifiedPermissionMessage, isResourcePermission, PermissionAttributes, } from '@backstage/plugin-permission-common'; @@ -53,6 +52,7 @@ import { BackstageUserPrincipal, DiscoveryService, HttpAuthService, + LoggerService, UserInfoService, } from '@backstage/backend-plugin-api'; @@ -101,7 +101,7 @@ const evaluatePermissionRequestBatchSchema: z.ZodSchema ConcreteLunrQuery; // @public export class LunrSearchEngine implements SearchEngine { - constructor(options: { logger: Logger }); + constructor(options: { logger: LoggerService }); // (undocumented) protected docStore: Record; // (undocumented) @@ -86,7 +86,7 @@ export class LunrSearchEngine implements SearchEngine { // (undocumented) protected highlightPreTag: string; // (undocumented) - protected logger: Logger; + protected logger: LoggerService; // (undocumented) protected lunrIndices: Record; // (undocumented) @@ -139,7 +139,7 @@ export type NewlineDelimitedJsonCollatorFactoryOptions = { type: string; searchPattern: string; reader: UrlReader; - logger: Logger; + logger: LoggerService; visibilityPermission?: Permission; }; @@ -168,7 +168,7 @@ export interface RegisterDecoratorParameters { // @public export class Scheduler { - constructor(options: { logger: Logger }); + constructor(options: { logger: LoggerService }); addToSchedule(options: ScheduleTaskParameters): void; start(): void; stop(): void; diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 7f5516be89..44a0c7bbd4 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -56,8 +56,7 @@ "lodash": "^4.17.21", "lunr": "^2.3.9", "ndjson": "^2.0.0", - "uuid": "^9.0.0", - "winston": "^3.2.1" + "uuid": "^9.0.0" }, "devDependencies": { "@backstage/backend-common": "workspace:^", diff --git a/plugins/search-backend-node/src/IndexBuilder.ts b/plugins/search-backend-node/src/IndexBuilder.ts index 98c6853cb1..6f29e4de57 100644 --- a/plugins/search-backend-node/src/IndexBuilder.ts +++ b/plugins/search-backend-node/src/IndexBuilder.ts @@ -18,15 +18,15 @@ import { DocumentDecoratorFactory, DocumentTypeInfo, } from '@backstage/plugin-search-common'; -import { Transform, pipeline } from 'stream'; -import { Logger } from 'winston'; +import { pipeline, Transform } from 'stream'; import { Scheduler } from './Scheduler'; import { - SearchEngine, IndexBuilderOptions, RegisterCollatorParameters, RegisterDecoratorParameters, + SearchEngine, } from './types'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Used for adding collators, decorators and compile them into tasks which are added to a scheduler returned to the caller. @@ -37,7 +37,7 @@ export class IndexBuilder { private decorators: Record; private documentTypes: Record; private searchEngine: SearchEngine; - private logger: Logger; + private logger: LoggerService; constructor(options: IndexBuilderOptions) { this.collators = {}; diff --git a/plugins/search-backend-node/src/Scheduler.ts b/plugins/search-backend-node/src/Scheduler.ts index 39c423263c..7775db086c 100644 --- a/plugins/search-backend-node/src/Scheduler.ts +++ b/plugins/search-backend-node/src/Scheduler.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -import { Logger } from 'winston'; import { TaskFunction, TaskRunner } from '@backstage/backend-tasks'; +import { LoggerService } from '@backstage/backend-plugin-api'; type TaskEnvelope = { task: TaskFunction; @@ -37,12 +37,12 @@ export type ScheduleTaskParameters = { * @public */ export class Scheduler { - private logger: Logger; + private logger: LoggerService; private schedule: { [id: string]: TaskEnvelope }; private abortControllers: AbortController[]; private isRunning: boolean; - constructor(options: { logger: Logger }) { + constructor(options: { logger: LoggerService }) { this.logger = options.logger; this.schedule = {}; this.abortControllers = []; diff --git a/plugins/search-backend-node/src/alpha.ts b/plugins/search-backend-node/src/alpha.ts index 272bef7f84..43bda67658 100644 --- a/plugins/search-backend-node/src/alpha.ts +++ b/plugins/search-backend-node/src/alpha.ts @@ -14,25 +14,20 @@ * limitations under the License. */ -import { Logger } from 'winston'; - import { - createServiceRef, - createServiceFactory, coreServices, + createExtensionPoint, + createServiceFactory, + createServiceRef, + LoggerService, } from '@backstage/backend-plugin-api'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { DocumentTypeInfo } from '@backstage/plugin-search-common'; -import { createExtensionPoint } from '@backstage/backend-plugin-api'; import { + IndexBuilder, RegisterCollatorParameters, RegisterDecoratorParameters, -} from '@backstage/plugin-search-backend-node'; - -import { SearchEngine, - IndexBuilder, } from '@backstage/plugin-search-backend-node'; /** @@ -78,7 +73,7 @@ export interface SearchEngineRegistryExtensionPoint { } type DefaultSearchIndexServiceOptions = { - logger: Logger; + logger: LoggerService; }; /** @@ -86,7 +81,7 @@ type DefaultSearchIndexServiceOptions = { * Reponsible for register the indexing task and start the schedule. */ class DefaultSearchIndexService implements SearchIndexService { - private logger: Logger; + private logger: LoggerService; private indexBuilder: IndexBuilder | null = null; private constructor(options: DefaultSearchIndexServiceOptions) { @@ -134,7 +129,7 @@ export const searchIndexServiceRef = createServiceRef({ }, factory({ logger }) { return DefaultSearchIndexService.fromConfig({ - logger: loggerToWinstonLogger(logger), + logger, }); }, }), diff --git a/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts b/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts index de77f5ba7a..e7d749dd41 100644 --- a/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts +++ b/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts @@ -16,11 +16,11 @@ import { Config } from '@backstage/config'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; -import { Logger } from 'winston'; import { Permission } from '@backstage/plugin-permission-common'; import { Readable } from 'stream'; import { UrlReader } from '@backstage/backend-common'; import { parse as parseNdjson } from 'ndjson'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Options for instantiate NewlineDelimitedJsonCollatorFactory @@ -30,7 +30,7 @@ export type NewlineDelimitedJsonCollatorFactoryOptions = { type: string; searchPattern: string; reader: UrlReader; - logger: Logger; + logger: LoggerService; visibilityPermission?: Permission; }; @@ -74,7 +74,7 @@ export class NewlineDelimitedJsonCollatorFactory type: string, private readonly searchPattern: string, private readonly reader: UrlReader, - private readonly logger: Logger, + private readonly logger: LoggerService, visibilityPermission: Permission | undefined, ) { this.type = type; diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts index a2db52f960..1786d07a9d 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts @@ -19,12 +19,12 @@ import { IndexableResultSet, SearchQuery, } from '@backstage/plugin-search-common'; -import { SearchEngine, QueryTranslator } from '../types'; +import { QueryTranslator, SearchEngine } from '../types'; import { MissingIndexError } from '../errors'; import lunr from 'lunr'; import { v4 as uuid } from 'uuid'; -import { Logger } from 'winston'; import { LunrSearchEngineIndexer } from './LunrSearchEngineIndexer'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Type of translated query for the Lunr Search Engine. @@ -54,11 +54,11 @@ export type LunrQueryTranslator = (query: SearchQuery) => ConcreteLunrQuery; export class LunrSearchEngine implements SearchEngine { protected lunrIndices: Record = {}; protected docStore: Record; - protected logger: Logger; + protected logger: LoggerService; protected highlightPreTag: string; protected highlightPostTag: string; - constructor(options: { logger: Logger }) { + constructor(options: { logger: LoggerService }) { this.logger = options.logger; this.docStore = {}; const uuidTag = uuid(); diff --git a/plugins/search-backend-node/src/types.ts b/plugins/search-backend-node/src/types.ts index 742d575ed3..18853d1069 100644 --- a/plugins/search-backend-node/src/types.ts +++ b/plugins/search-backend-node/src/types.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import { BackstageCredentials } from '@backstage/backend-plugin-api'; +import { + BackstageCredentials, + LoggerService, +} from '@backstage/backend-plugin-api'; import { TaskRunner } from '@backstage/backend-tasks'; import { DocumentCollatorFactory, @@ -23,7 +26,6 @@ import { SearchQuery, } from '@backstage/plugin-search-common'; import { Writable } from 'stream'; -import { Logger } from 'winston'; /** * Options required to instantiate the index builder. @@ -31,7 +33,7 @@ import { Logger } from 'winston'; */ export type IndexBuilderOptions = { searchEngine: SearchEngine; - logger: Logger; + logger: LoggerService; }; /** diff --git a/plugins/search-backend/api-report.md b/plugins/search-backend/api-report.md index 4f99632f28..717a9dbe8b 100644 --- a/plugins/search-backend/api-report.md +++ b/plugins/search-backend/api-report.md @@ -9,7 +9,7 @@ import { DiscoveryService } from '@backstage/backend-plugin-api'; import { DocumentTypeInfo } from '@backstage/plugin-search-common'; import express from 'express'; import { HttpAuthService } from '@backstage/backend-plugin-api'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { SearchEngine } from '@backstage/plugin-search-backend-node'; @@ -24,7 +24,7 @@ export type RouterOptions = { discovery?: DiscoveryService; permissions: PermissionEvaluator | PermissionAuthorizer; config: Config; - logger: Logger; + logger: LoggerService; auth?: AuthService; httpAuth?: HttpAuthService; }; diff --git a/plugins/search-backend/src/alpha.ts b/plugins/search-backend/src/alpha.ts index 86bbcdeebe..0ca5777102 100644 --- a/plugins/search-backend/src/alpha.ts +++ b/plugins/search-backend/src/alpha.ts @@ -18,19 +18,18 @@ import { coreServices, createBackendPlugin, } from '@backstage/backend-plugin-api'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { + LunrSearchEngine, RegisterCollatorParameters, RegisterDecoratorParameters, SearchEngine, - LunrSearchEngine, } from '@backstage/plugin-search-backend-node'; import { - searchIndexServiceRef, - searchIndexRegistryExtensionPoint, - SearchIndexRegistryExtensionPoint, SearchEngineRegistryExtensionPoint, searchEngineRegistryExtensionPoint, + searchIndexRegistryExtensionPoint, + SearchIndexRegistryExtensionPoint, + searchIndexServiceRef, } from '@backstage/plugin-search-backend-node/alpha'; import { createRouter } from './service/router'; @@ -114,7 +113,7 @@ export default createBackendPlugin({ let searchEngine = searchEngineRegistry.getSearchEngine(); if (!searchEngine) { searchEngine = new LunrSearchEngine({ - logger: loggerToWinstonLogger(logger), + logger, }); } @@ -133,7 +132,7 @@ export default createBackendPlugin({ permissions, auth, httpAuth, - logger: loggerToWinstonLogger(logger), + logger, engine: searchEngine, types: searchIndexService.getDocumentTypes(), }); diff --git a/plugins/search-backend/src/service/router.ts b/plugins/search-backend/src/service/router.ts index ae470ba40e..250be2853c 100644 --- a/plugins/search-backend/src/service/router.ts +++ b/plugins/search-backend/src/service/router.ts @@ -15,12 +15,11 @@ */ import express from 'express'; -import { Logger } from 'winston'; import { z } from 'zod'; import { - HostDiscovery, createLegacyAuthAdapters, errorHandler, + HostDiscovery, } from '@backstage/backend-common'; import { InputError } from '@backstage/errors'; import { Config } from '@backstage/config'; @@ -42,6 +41,7 @@ import { AuthService, DiscoveryService, HttpAuthService, + LoggerService, } from '@backstage/backend-plugin-api'; const jsonObjectSchema: z.ZodSchema = z.lazy(() => { @@ -68,7 +68,7 @@ export type RouterOptions = { discovery?: DiscoveryService; permissions: PermissionEvaluator | PermissionAuthorizer; config: Config; - logger: Logger; + logger: LoggerService; auth?: AuthService; httpAuth?: HttpAuthService; }; diff --git a/plugins/sonarqube-backend/api-report.md b/plugins/sonarqube-backend/api-report.md index c3c684f9d4..3c902c7fa7 100644 --- a/plugins/sonarqube-backend/api-report.md +++ b/plugins/sonarqube-backend/api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; import { Config } from '@backstage/config'; import express from 'express'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; // @public export function createRouter(options: RouterOptions): Promise; @@ -26,7 +26,7 @@ export class DefaultSonarqubeInfoProvider implements SonarqubeInfoProvider { // @public export interface RouterOptions { - logger: Logger; + logger: LoggerService; sonarqubeInfoProvider: SonarqubeInfoProvider; } diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index e24267524c..505cb96fc2 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -40,7 +40,6 @@ "express": "^4.18.1", "express-promise-router": "^4.1.0", "node-fetch": "^2.6.7", - "winston": "^3.2.1", "yn": "^5.0.0" }, "devDependencies": { diff --git a/plugins/sonarqube-backend/src/plugin.ts b/plugins/sonarqube-backend/src/plugin.ts index fd4fb77fb4..a4613d6204 100644 --- a/plugins/sonarqube-backend/src/plugin.ts +++ b/plugins/sonarqube-backend/src/plugin.ts @@ -14,10 +14,9 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { - createBackendPlugin, coreServices, + createBackendPlugin, } from '@backstage/backend-plugin-api'; import { DefaultSonarqubeInfoProvider } from './service/sonarqubeInfoProvider'; import { createRouter } from './service/router'; @@ -37,13 +36,12 @@ export const sonarqubePlugin = createBackendPlugin({ httpRouter: coreServices.httpRouter, }, async init({ logger, config, httpRouter }) { - const winstonLogger = loggerToWinstonLogger(logger); httpRouter.use( await createRouter({ /** * Logger for logging purposes */ - logger: winstonLogger, + logger, /** * Info provider to be able to get all necessary information for the APIs */ diff --git a/plugins/sonarqube-backend/src/service/router.ts b/plugins/sonarqube-backend/src/service/router.ts index 5a993b5d59..d3071277be 100644 --- a/plugins/sonarqube-backend/src/service/router.ts +++ b/plugins/sonarqube-backend/src/service/router.ts @@ -17,9 +17,9 @@ import { errorHandler } from '@backstage/backend-common'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; import { SonarqubeInfoProvider } from './sonarqubeInfoProvider'; import { InputError } from '@backstage/errors'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * Dependencies needed by the router @@ -29,7 +29,7 @@ export interface RouterOptions { /** * Logger for logging purposes */ - logger: Logger; + logger: LoggerService; /** * Info provider to be able to get all necessary information for the APIs */ diff --git a/plugins/sonarqube-backend/src/service/standaloneServer.ts b/plugins/sonarqube-backend/src/service/standaloneServer.ts index 06a8d4ffb2..d438e805d4 100644 --- a/plugins/sonarqube-backend/src/service/standaloneServer.ts +++ b/plugins/sonarqube-backend/src/service/standaloneServer.ts @@ -19,14 +19,14 @@ import { loadBackendConfig, } from '@backstage/backend-common'; import { Server } from 'http'; -import { Logger } from 'winston'; import { createRouter } from './router'; import { DefaultSonarqubeInfoProvider } from './sonarqubeInfoProvider'; +import { LoggerService } from '@backstage/backend-plugin-api'; export interface ServerOptions { port: number; enableCors: boolean; - logger: Logger; + logger: LoggerService; } export async function startStandaloneServer( diff --git a/plugins/tech-insights-backend-module-jsonfc/api-report.md b/plugins/tech-insights-backend-module-jsonfc/api-report.md index 790aa0b666..7fc63bc5ea 100644 --- a/plugins/tech-insights-backend-module-jsonfc/api-report.md +++ b/plugins/tech-insights-backend-module-jsonfc/api-report.md @@ -9,7 +9,7 @@ import { CheckResponse } from '@backstage/plugin-tech-insights-common'; import { CheckValidationResponse } from '@backstage/plugin-tech-insights-node'; import { Config } from '@backstage/config'; import { FactChecker } from '@backstage/plugin-tech-insights-node'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { Operator } from 'json-rules-engine'; import { TechInsightCheck } from '@backstage/plugin-tech-insights-node'; import { TechInsightCheckRegistry } from '@backstage/plugin-tech-insights-node'; @@ -75,7 +75,7 @@ export class JsonRulesEngineFactCheckerFactory { // @public export type JsonRulesEngineFactCheckerFactoryOptions = { checks: TechInsightJsonRuleCheck[]; - logger: Logger; + logger: LoggerService; checkRegistry?: TechInsightCheckRegistry; operators?: Operator[]; }; @@ -84,7 +84,7 @@ export type JsonRulesEngineFactCheckerFactoryOptions = { export type JsonRulesEngineFactCheckerOptions = { checks: TechInsightJsonRuleCheck[]; repository: TechInsightsStore; - logger: Logger; + logger: LoggerService; checkRegistry?: TechInsightCheckRegistry; operators?: Operator[]; }; diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index 1b1b8a2c1b..ea2e4fdd5c 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -47,8 +47,7 @@ "ajv": "^8.10.0", "json-rules-engine": "^6.1.2", "lodash": "^4.17.21", - "luxon": "^3.0.0", - "winston": "^3.2.1" + "luxon": "^3.0.0" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/tech-insights-backend-module-jsonfc/src/module/techInsightsModuleJsonRulesEngineFactCheckerFactory.ts b/plugins/tech-insights-backend-module-jsonfc/src/module/techInsightsModuleJsonRulesEngineFactCheckerFactory.ts index 8527b91d9d..4a5f1c7816 100644 --- a/plugins/tech-insights-backend-module-jsonfc/src/module/techInsightsModuleJsonRulesEngineFactCheckerFactory.ts +++ b/plugins/tech-insights-backend-module-jsonfc/src/module/techInsightsModuleJsonRulesEngineFactCheckerFactory.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendModule, @@ -40,9 +39,8 @@ export const techInsightsModuleJsonRulesEngineFactCheckerFactory = techInsights: techInsightsFactCheckerFactoryExtensionPoint, }, async init({ config, logger, techInsights }) { - const winstonLogger = loggerToWinstonLogger(logger); const factory = JsonRulesEngineFactCheckerFactory.fromConfig(config, { - logger: winstonLogger, + logger, }); techInsights.setFactCheckerFactory(factory); }, diff --git a/plugins/tech-insights-backend-module-jsonfc/src/service/JsonRulesEngineFactChecker.ts b/plugins/tech-insights-backend-module-jsonfc/src/service/JsonRulesEngineFactChecker.ts index 51609bc916..ed03925400 100644 --- a/plugins/tech-insights-backend-module-jsonfc/src/service/JsonRulesEngineFactChecker.ts +++ b/plugins/tech-insights-backend-module-jsonfc/src/service/JsonRulesEngineFactChecker.ts @@ -18,11 +18,11 @@ import { Config } from '@backstage/config'; import { isError } from '@backstage/errors'; import { FactResponse } from '@backstage/plugin-tech-insights-common'; import { - FactChecker, - TechInsightCheckRegistry, - FlatTechInsightFact, - TechInsightsStore, CheckValidationResponse, + FactChecker, + FlatTechInsightFact, + TechInsightCheckRegistry, + TechInsightsStore, } from '@backstage/plugin-tech-insights-node'; import Ajv, { SchemaObject } from 'ajv'; import { @@ -32,12 +32,12 @@ import { TopLevelCondition, } from 'json-rules-engine'; import { pick } from 'lodash'; -import { Logger } from 'winston'; import { JSON_RULE_ENGINE_CHECK_TYPE } from '../constants'; import { JsonRuleBooleanCheckResult, TechInsightJsonRuleCheck } from '../types'; import { DefaultCheckRegistry } from './CheckRegistry'; import { readChecksFromConfig } from './config'; import * as validationSchema from './validation-schema.json'; +import { LoggerService } from '@backstage/backend-plugin-api'; const noopEvent = { type: 'noop', @@ -52,7 +52,7 @@ const noopEvent = { export type JsonRulesEngineFactCheckerOptions = { checks: TechInsightJsonRuleCheck[]; repository: TechInsightsStore; - logger: Logger; + logger: LoggerService; checkRegistry?: TechInsightCheckRegistry; operators?: Operator[]; }; @@ -68,7 +68,7 @@ export class JsonRulesEngineFactChecker { private readonly checkRegistry: TechInsightCheckRegistry; private repository: TechInsightsStore; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly validationSchema: SchemaObject; private readonly operators: Operator[]; @@ -164,7 +164,7 @@ export class JsonRulesEngineFactChecker const msg = 'Failed to to validate conditions against JSON schema'; this.logger.warn( 'Failed to to validate conditions against JSON schema', - validator.errors, + new Error(JSON.stringify(validator.errors)), ); return { valid: false, @@ -346,7 +346,7 @@ export class JsonRulesEngineFactChecker */ export type JsonRulesEngineFactCheckerFactoryOptions = { checks: TechInsightJsonRuleCheck[]; - logger: Logger; + logger: LoggerService; checkRegistry?: TechInsightCheckRegistry; operators?: Operator[]; }; @@ -360,7 +360,7 @@ export type JsonRulesEngineFactCheckerFactoryOptions = { */ export class JsonRulesEngineFactCheckerFactory { private readonly checks: TechInsightJsonRuleCheck[]; - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly checkRegistry?: TechInsightCheckRegistry; private readonly operators?: Operator[]; diff --git a/plugins/tech-insights-backend/api-report.md b/plugins/tech-insights-backend/api-report.md index c2121bf655..dc8619aa52 100644 --- a/plugins/tech-insights-backend/api-report.md +++ b/plugins/tech-insights-backend/api-report.md @@ -16,7 +16,7 @@ import { FactRetriever } from '@backstage/plugin-tech-insights-node'; import { FactRetrieverRegistration } from '@backstage/plugin-tech-insights-node'; import { FactRetrieverRegistry as FactRetrieverRegistry_2 } from '@backstage/plugin-tech-insights-node'; import { HumanDuration } from '@backstage/types'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PersistenceContext as PersistenceContext_2 } from '@backstage/plugin-tech-insights-node'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; @@ -79,7 +79,7 @@ export type PersistenceContext = PersistenceContext_2; // @public export type PersistenceContextOptions = { - logger: Logger; + logger: LoggerService; }; // @public @@ -89,7 +89,7 @@ export interface RouterOptions< > { config: Config; factChecker?: FactChecker; - logger: Logger; + logger: LoggerService; persistenceContext: PersistenceContext_2; } @@ -123,7 +123,7 @@ export interface TechInsightsOptions< factRetrieverRegistry?: FactRetrieverRegistry_2; factRetrievers?: FactRetrieverRegistration[]; // (undocumented) - logger: Logger; + logger: LoggerService; persistenceContext?: PersistenceContext_2; // (undocumented) scheduler: PluginTaskScheduler; diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index 82e0cb3236..a3cf4a8db0 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -57,7 +57,6 @@ "luxon": "^3.0.0", "semver": "^7.5.3", "uuid": "^9.0.0", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/tech-insights-backend/src/plugin/plugin.ts b/plugins/tech-insights-backend/src/plugin/plugin.ts index e97a0c98d8..e56539ec28 100644 --- a/plugins/tech-insights-backend/src/plugin/plugin.ts +++ b/plugins/tech-insights-backend/src/plugin/plugin.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, createBackendPlugin, @@ -114,7 +113,6 @@ export const techInsightsPlugin = createBackendPlugin({ tokenManager, auth, }) { - const winstonLogger = loggerToWinstonLogger(logger); const factRetrievers: FactRetrieverRegistration[] = Object.entries( addedFactRetrievers, ) @@ -134,7 +132,7 @@ export const techInsightsPlugin = createBackendPlugin({ factCheckerFactory, factRetrieverRegistry, factRetrievers, - logger: winstonLogger, + logger, persistenceContext, scheduler, tokenManager, @@ -145,7 +143,7 @@ export const techInsightsPlugin = createBackendPlugin({ await createRouter({ ...context, config, - logger: winstonLogger, + logger, }), ); }, diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts index 04035ca8c7..db1ee7f2a9 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts @@ -22,9 +22,9 @@ import { TechInsightFact, TechInsightsStore, } from '@backstage/plugin-tech-insights-node'; -import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { Duration } from 'luxon'; +import { LoggerService } from '@backstage/backend-plugin-api'; function randomDailyCron() { const rand = (min: number, max: number) => @@ -72,7 +72,7 @@ export class DefaultFactRetrieverEngine implements FactRetrieverEngine { private readonly repository: TechInsightsStore, private readonly factRetrieverRegistry: FactRetrieverRegistry, private readonly factRetrieverContext: FactRetrieverContext, - private readonly logger: Logger, + private readonly logger: LoggerService, private readonly scheduler: PluginTaskScheduler, private readonly defaultCadence?: string, private readonly defaultTimeout?: Duration, diff --git a/plugins/tech-insights-backend/src/service/persistence/TechInsightsDatabase.ts b/plugins/tech-insights-backend/src/service/persistence/TechInsightsDatabase.ts index 761a6bd273..e03d5b8704 100644 --- a/plugins/tech-insights-backend/src/service/persistence/TechInsightsDatabase.ts +++ b/plugins/tech-insights-backend/src/service/persistence/TechInsightsDatabase.ts @@ -26,9 +26,9 @@ import { FactSchema } from '@backstage/plugin-tech-insights-common'; import { rsort } from 'semver'; import { groupBy, omit } from 'lodash'; import { DateTime } from 'luxon'; -import { Logger } from 'winston'; import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model'; import { isMaxItems, isTtl } from '../fact/factRetrievers/utils'; +import { LoggerService } from '@backstage/backend-plugin-api'; type Transaction = Knex.Transaction; @@ -55,7 +55,10 @@ type RawDbFactSchemaRow = { export class TechInsightsDatabase implements TechInsightsStore { private readonly CHUNK_SIZE = 50; - constructor(private readonly db: Knex, private readonly logger: Logger) {} + constructor( + private readonly db: Knex, + private readonly logger: LoggerService, + ) {} async getLatestSchemas(ids?: string[]): Promise { const queryBuilder = this.db('fact_schemas'); diff --git a/plugins/tech-insights-backend/src/service/persistence/persistenceContext.ts b/plugins/tech-insights-backend/src/service/persistence/persistenceContext.ts index 3ddae3197f..e3792081e2 100644 --- a/plugins/tech-insights-backend/src/service/persistence/persistenceContext.ts +++ b/plugins/tech-insights-backend/src/service/persistence/persistenceContext.ts @@ -18,9 +18,9 @@ import { PluginDatabaseManager, resolvePackagePath, } from '@backstage/backend-common'; -import { Logger } from 'winston'; import { TechInsightsDatabase } from './TechInsightsDatabase'; import { PersistenceContext } from '@backstage/plugin-tech-insights-node'; +import { LoggerService } from '@backstage/backend-plugin-api'; const migrationsDir = resolvePackagePath( '@backstage/plugin-tech-insights-backend', @@ -33,7 +33,7 @@ const migrationsDir = resolvePackagePath( * @public */ export type PersistenceContextOptions = { - logger: Logger; + logger: LoggerService; }; const defaultOptions: PersistenceContextOptions = { diff --git a/plugins/tech-insights-backend/src/service/router.ts b/plugins/tech-insights-backend/src/service/router.ts index 53c1351ffa..8e01a73488 100644 --- a/plugins/tech-insights-backend/src/service/router.ts +++ b/plugins/tech-insights-backend/src/service/router.ts @@ -24,7 +24,6 @@ import { } from '@backstage/plugin-tech-insights-node'; import { CheckResult } from '@backstage/plugin-tech-insights-common'; -import { Logger } from 'winston'; import { DateTime } from 'luxon'; import { CompoundEntityRef, @@ -33,6 +32,7 @@ import { } from '@backstage/catalog-model'; import { errorHandler } from '@backstage/backend-common'; import { serializeError } from '@backstage/errors'; +import { LoggerService } from '@backstage/backend-plugin-api'; /** * @public @@ -63,7 +63,7 @@ export interface RouterOptions< /** * Implementation of Winston logger */ - logger: Logger; + logger: LoggerService; } /** diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts index 7b6f04b183..36c94c31d7 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts @@ -18,14 +18,13 @@ import { DefaultFactRetrieverEngine, FactRetrieverEngine, } from './fact/FactRetrieverEngine'; -import { Logger } from 'winston'; import { DefaultFactRetrieverRegistry } from './fact/FactRetrieverRegistry'; import { Config } from '@backstage/config'; import { + createLegacyAuthAdapters, PluginDatabaseManager, PluginEndpointDiscovery, TokenManager, - createLegacyAuthAdapters, } from '@backstage/backend-common'; import { FactChecker, @@ -38,7 +37,7 @@ import { import { initializePersistenceContext } from './persistence'; import { CheckResult } from '@backstage/plugin-tech-insights-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; -import { AuthService } from '@backstage/backend-plugin-api'; +import { AuthService, LoggerService } from '@backstage/backend-plugin-api'; /** * @public @@ -78,7 +77,7 @@ export interface TechInsightsOptions< */ persistenceContext?: PersistenceContext; - logger: Logger; + logger: LoggerService; config: Config; discovery: PluginEndpointDiscovery; database: PluginDatabaseManager; diff --git a/plugins/tech-insights-node/api-report.md b/plugins/tech-insights-node/api-report.md index bf4ee10dea..dc680557ce 100644 --- a/plugins/tech-insights-node/api-report.md +++ b/plugins/tech-insights-node/api-report.md @@ -13,7 +13,7 @@ import { ExtensionPoint } from '@backstage/backend-plugin-api'; import { FactSchema } from '@backstage/plugin-tech-insights-common'; import { HumanDuration } from '@backstage/types'; import { JsonValue } from '@backstage/types'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { TokenManager } from '@backstage/backend-common'; @@ -65,7 +65,7 @@ export interface FactRetriever { export type FactRetrieverContext = { config: Config; discovery: PluginEndpointDiscovery; - logger: Logger; + logger: LoggerService; tokenManager: TokenManager; auth: AuthService; entityFilter?: diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index bd703fadf3..b63746c727 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -41,8 +41,7 @@ "@backstage/plugin-tech-insights-common": "workspace:^", "@backstage/types": "workspace:^", "@types/luxon": "^3.0.0", - "luxon": "^3.0.0", - "winston": "^3.2.1" + "luxon": "^3.0.0" }, "devDependencies": { "@backstage/cli": "workspace:^" diff --git a/plugins/tech-insights-node/src/facts.ts b/plugins/tech-insights-node/src/facts.ts index 6d40bf615d..b649556ffb 100644 --- a/plugins/tech-insights-node/src/facts.ts +++ b/plugins/tech-insights-node/src/facts.ts @@ -21,8 +21,7 @@ import { TokenManager, } from '@backstage/backend-common'; import { FactSchema } from '@backstage/plugin-tech-insights-common'; -import { Logger } from 'winston'; -import { AuthService } from '@backstage/backend-plugin-api'; +import { AuthService, LoggerService } from '@backstage/backend-plugin-api'; /** * A container for facts. The shape of the fact records needs to correspond to the FactSchema with same `ref` value. @@ -91,7 +90,7 @@ export type FlatTechInsightFact = TechInsightFact & { export type FactRetrieverContext = { config: Config; discovery: PluginEndpointDiscovery; - logger: Logger; + logger: LoggerService; tokenManager: TokenManager; auth: AuthService; entityFilter?: diff --git a/plugins/todo-backend/api-report.md b/plugins/todo-backend/api-report.md index 3244b397eb..2a4d037a6c 100644 --- a/plugins/todo-backend/api-report.md +++ b/plugins/todo-backend/api-report.md @@ -8,7 +8,7 @@ import { CatalogApi } from '@backstage/catalog-client'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import express from 'express'; -import { Logger } from 'winston'; +import { LoggerService } from '@backstage/backend-plugin-api'; import { ScmIntegrations } from '@backstage/integration'; import { ServiceRef } from '@backstage/backend-plugin-api'; import { UrlReader } from '@backstage/backend-common'; @@ -136,7 +136,7 @@ export class TodoScmReader implements TodoReader { // @public (undocumented) export type TodoScmReaderOptions = { - logger: Logger; + logger: LoggerService; reader: UrlReader; integrations: ScmIntegrations; parser?: TodoParser; diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index 9575292283..ae540ff100 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -46,7 +46,6 @@ "@types/express": "^4.17.6", "express": "^4.17.1", "leasot": "^12.0.0", - "winston": "^3.2.1", "yn": "^4.0.0" }, "devDependencies": { diff --git a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts index 2ce1771ecb..7c558a8601 100644 --- a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts +++ b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts @@ -14,9 +14,8 @@ * limitations under the License. */ -import { loggerToWinstonLogger, UrlReader } from '@backstage/backend-common'; +import { UrlReader } from '@backstage/backend-common'; import { ScmIntegrations } from '@backstage/integration'; -import { Logger } from 'winston'; import { ReadTodosOptions, @@ -32,6 +31,7 @@ import { coreServices, createServiceFactory, createServiceRef, + LoggerService, } from '@backstage/backend-plugin-api'; const excludedExtensions = [ @@ -48,7 +48,7 @@ const MAX_FILE_SIZE = 200000; /** @public */ export type TodoScmReaderOptions = { - logger: Logger; + logger: LoggerService; reader: UrlReader; integrations: ScmIntegrations; parser?: TodoParser; @@ -62,7 +62,7 @@ type CacheItem = { /** @public */ export class TodoScmReader implements TodoReader { - private readonly logger: Logger; + private readonly logger: LoggerService; private readonly reader: UrlReader; private readonly parser: TodoParser; private readonly integrations: ScmIntegrations; @@ -187,9 +187,8 @@ export const todoReaderServiceRef = createServiceRef({ logger: coreServices.logger, }, factory: async ({ reader, config, logger }) => { - const winstonLogger = loggerToWinstonLogger(logger); return TodoScmReader.fromConfig(config, { - logger: winstonLogger, + logger, reader, }); }, diff --git a/yarn.lock b/yarn.lock index 2029338d94..0370652b83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3504,6 +3504,7 @@ __metadata: resolution: "@backstage/backend-tasks@workspace:packages/backend-tasks" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" @@ -3517,7 +3518,6 @@ __metadata: luxon: ^3.0.0 uuid: ^9.0.0 wait-for-expect: ^3.0.2 - winston: ^3.2.1 zod: ^3.22.4 languageName: unknown linkType: soft @@ -4406,7 +4406,6 @@ __metadata: marked: ^12.0.0 node-fetch: ^2.6.5 supertest: ^6.1.3 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -4459,6 +4458,7 @@ __metadata: dependencies: "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@types/express": "*" @@ -4468,7 +4468,6 @@ __metadata: express-promise-router: ^4.1.0 http-proxy-middleware: ^2.0.0 supertest: ^6.1.6 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -4722,7 +4721,6 @@ __metadata: luxon: ^3.0.0 node-fetch: ^2.6.7 supertest: ^6.1.3 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -5165,7 +5163,6 @@ __metadata: mime-types: ^2.1.27 p-limit: ^3.1.0 supertest: ^6.1.6 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -5233,7 +5230,6 @@ __metadata: "@types/supertest": ^2.0.8 express: ^4.17.1 express-promise-router: ^4.1.0 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -5345,7 +5341,6 @@ __metadata: express: ^4.17.1 express-promise-router: ^4.1.0 knex: ^3.0.0 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -5478,7 +5473,6 @@ __metadata: msw: ^1.0.0 node-fetch: ^2.6.7 uuid: ^9.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -5545,7 +5539,6 @@ __metadata: msw: ^1.0.0 node-fetch: ^2.6.7 uuid: ^9.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -5563,7 +5556,6 @@ __metadata: "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-kubernetes-common": "workspace:^" "@google-cloud/container": ^5.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -5586,7 +5578,6 @@ __metadata: msw: ^1.0.0 node-fetch: ^2.6.7 uuid: ^9.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -5634,7 +5625,6 @@ __metadata: msw: ^1.0.0 node-fetch: ^2.6.7 uuid: ^9.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -5658,7 +5648,6 @@ __metadata: msw: ^1.0.0 node-fetch: ^2.6.7 uuid: ^9.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -5686,7 +5675,6 @@ __metadata: knex: ^3.0.0 luxon: ^3.0.0 uuid: ^9.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -5735,7 +5723,6 @@ __metadata: p-limit: ^3.0.2 qs: ^6.9.4 uuid: ^9.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -5781,7 +5768,6 @@ __metadata: msw: ^1.0.0 node-fetch: ^2.6.7 uuid: ^9.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -5868,7 +5854,7 @@ __metadata: supertest: ^6.1.3 uuid: ^9.0.0 wait-for-expect: ^3.0.2 - winston: ^3.2.1 + winston: ^3.13.0 yaml: ^2.0.0 yn: ^4.0.0 zod: ^3.22.4 @@ -6296,7 +6282,6 @@ __metadata: knex: ^3.0.0 supertest: ^6.1.6 uuid: ^9.0.0 - winston: ^3.2.1 xml2js: ^0.6.0 yn: ^4.0.0 languageName: unknown @@ -6477,7 +6462,6 @@ __metadata: ping: ^0.4.1 semver: ^7.5.3 supertest: ^6.2.4 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -6565,7 +6549,6 @@ __metadata: knex: ^3.0.0 node-fetch: ^2.6.7 supertest: ^6.2.4 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -6782,7 +6765,6 @@ __metadata: lodash: ^4.17.21 node-fetch: ^2.6.7 supertest: ^6.2.4 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -7357,7 +7339,6 @@ __metadata: express-promise-router: ^4.1.0 jenkins: ^1.0.0 node-fetch: ^2.6.7 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -7419,7 +7400,6 @@ __metadata: kafkajs: ^2.0.0 lodash: ^4.17.21 supertest: ^6.1.3 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -7731,7 +7711,6 @@ __metadata: node-fetch: ^2.6.7 supertest: ^6.2.4 uuid: ^9.0.0 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -7867,7 +7846,6 @@ __metadata: express-promise-router: ^4.1.0 node-fetch: ^2.6.7 supertest: ^6.2.4 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -8154,7 +8132,6 @@ __metadata: express-promise-router: ^4.1.0 node-fetch: ^2.6.7 supertest: ^6.1.6 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -8220,7 +8197,6 @@ __metadata: msw: ^1.0.0 node-fetch: ^2.6.7 supertest: ^6.1.6 - winston: ^3.2.1 yn: ^4.0.0 zod: ^3.22.4 languageName: unknown @@ -8308,7 +8284,6 @@ __metadata: node-fetch: ^2.6.7 supertest: ^6.1.3 uuid: ^9.0.0 - winston: ^3.2.1 yn: ^4.0.0 zod: ^3.22.4 languageName: unknown @@ -8647,7 +8622,6 @@ __metadata: libsodium-wrappers: ^0.7.11 octokit: ^3.0.0 octokit-plugin-create-pull-request: ^5.0.0 - winston: ^3.2.1 yaml: ^2.0.0 languageName: unknown linkType: soft @@ -9023,7 +8997,6 @@ __metadata: "@backstage/plugin-search-common": "workspace:^" msw: ^1.2.1 node-fetch: ^2.6.7 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -9060,7 +9033,6 @@ __metadata: msw: ^1.2.1 node-fetch: ^2.6.7 qs: ^6.9.4 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -9086,7 +9058,6 @@ __metadata: msw: ^1.0.0 node-fetch: ^2.6.7 p-limit: ^3.1.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -9108,7 +9079,6 @@ __metadata: lunr: ^2.3.9 ndjson: ^2.0.0 uuid: ^9.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -9389,7 +9359,6 @@ __metadata: msw: ^1.0.0 node-fetch: ^2.6.7 supertest: ^6.2.4 - winston: ^3.2.1 yn: ^5.0.0 languageName: unknown linkType: soft @@ -9558,7 +9527,6 @@ __metadata: json-rules-engine: ^6.1.2 lodash: ^4.17.21 luxon: ^3.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -9591,7 +9559,6 @@ __metadata: supertest: ^6.1.3 uuid: ^9.0.0 wait-for-expect: ^3.0.2 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -9619,7 +9586,6 @@ __metadata: "@backstage/types": "workspace:^" "@types/luxon": ^3.0.0 luxon: ^3.0.0 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -9912,7 +9878,6 @@ __metadata: express: ^4.17.1 leasot: ^12.0.0 supertest: ^6.1.3 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -12091,7 +12056,6 @@ __metadata: express-promise-router: ^4.1.0 supertest: ^6.1.6 uuid: ^9.0.0 - winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft @@ -45965,7 +45929,7 @@ __metadata: languageName: node linkType: hard -"winston@npm:^3.2.1": +"winston@npm:^3.13.0, winston@npm:^3.2.1": version: 3.13.0 resolution: "winston@npm:3.13.0" dependencies: