From a50b6474a705e31a6bc65c49b63ded4b1427f955 Mon Sep 17 00:00:00 2001 From: Chris Trombley Date: Mon, 25 Apr 2022 18:29:17 -0700 Subject: [PATCH] feat(tech-insights): make tokenManager available on FactRetrieverContext Signed-off-by: Chris Trombley --- packages/backend/src/plugins/techInsights.ts | 1 + .../tech-insights-backend-module-jsonfc/README.md | 1 + plugins/tech-insights-backend/README.md | 14 +++++++++++--- .../entityMetadataFactRetriever.test.ts | 2 ++ .../factRetrievers/entityMetadataFactRetriever.ts | 12 ++++++++++-- .../entityOwnershipFactRetriever.test.ts | 2 ++ .../factRetrievers/entityOwnershipFactRetriever.ts | 12 ++++++++++-- .../factRetrievers/techdocsFactRetriever.test.ts | 2 ++ .../fact/factRetrievers/techdocsFactRetriever.ts | 12 ++++++++++-- .../src/service/router.test.ts | 2 ++ .../src/service/techInsightsContextBuilder.ts | 4 ++++ plugins/tech-insights-node/src/facts.ts | 6 +++++- 12 files changed, 60 insertions(+), 10 deletions(-) diff --git a/packages/backend/src/plugins/techInsights.ts b/packages/backend/src/plugins/techInsights.ts index 94ce27656a..80ac559859 100644 --- a/packages/backend/src/plugins/techInsights.ts +++ b/packages/backend/src/plugins/techInsights.ts @@ -38,6 +38,7 @@ export default async function createPlugin( database: env.database, scheduler: env.scheduler, discovery: env.discovery, + tokenManager: env.tokenManager, factRetrievers: [ createFactRetrieverRegistration({ cadence: '1 1 1 * *', // Example cron, At 01:01 on day-of-month 1. diff --git a/plugins/tech-insights-backend-module-jsonfc/README.md b/plugins/tech-insights-backend-module-jsonfc/README.md index 70b2ef2c40..f61666d671 100644 --- a/plugins/tech-insights-backend-module-jsonfc/README.md +++ b/plugins/tech-insights-backend-module-jsonfc/README.md @@ -28,6 +28,7 @@ and modify the `techInsights.ts` file to contain a reference to the FactCheckers config: env.config, database: env.database, discovery: env.discovery, + tokenManager: env.tokenManager, factRetrievers: [myFactRetrieverRegistration], + factCheckerFactory: myFactCheckerFactory }); diff --git a/plugins/tech-insights-backend/README.md b/plugins/tech-insights-backend/README.md index ee6ef4c0cc..e88d150393 100644 --- a/plugins/tech-insights-backend/README.md +++ b/plugins/tech-insights-backend/README.md @@ -35,6 +35,7 @@ export default async function createPlugin( database: env.database, discovery: env.discovery, scheduler: env.scheduler, + tokenManager: env.tokenManager, factRetrievers: [], // Fact retrievers registrations you want tech insights to use }); @@ -104,6 +105,7 @@ const builder = buildTechInsightsContext({ config: env.config, database: env.database, discovery: env.discovery, + tokenManager: env.tokenManager, - factRetrievers: [], + factRetrievers: [myFactRetrieverRegistration], }); @@ -119,6 +121,7 @@ const builder = buildTechInsightsContext({ config: env.config, database: env.database, discovery: env.discovery, + tokenManager: env.tokenManager, - factRetrievers: [], + factRetrievers: process.env.MAIN_FACT_RETRIEVER_INSTANCE ? [myFactRetrieverRegistration] : [], }); @@ -158,9 +161,12 @@ const myFactRetriever: FactRetriever = { const catalogClient = new CatalogClient({ discoveryApi: discovery, }); - const entities = await catalogClient.getEntities({ - filter: [{ kind: 'component' }], - }); + const entities = await catalogClient.getEntities( + { + filter: [{ kind: 'component' }], + }, + { token }, + ); /** * snip: Do complex logic to retrieve facts from external system or calculate fact values */ @@ -214,6 +220,7 @@ and modify the `techInsights.ts` file to contain a reference to the FactChecker config: env.config, database: env.database, discovery: env.discovery, + tokenManager: env.tokenManager, factRetrievers: [myFactRetrieverRegistration], + factCheckerFactory: myFactCheckerFactory }); @@ -273,6 +280,7 @@ export default async function createPlugin( config: env.config, database: env.database, discovery: env.discovery, + tokenManager: env.tokenManager, factRetrievers: [ createFactRetrieverRegistration({ cadence: '0 */6 * * *', // Run every 6 hours - https://crontab.guru/#0_*/6_*_*_* diff --git a/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityMetadataFactRetriever.test.ts b/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityMetadataFactRetriever.test.ts index 9d5c57637d..31400788b5 100644 --- a/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityMetadataFactRetriever.test.ts +++ b/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityMetadataFactRetriever.test.ts @@ -18,6 +18,7 @@ import { RELATION_OWNED_BY } from '@backstage/catalog-model'; import { PluginEndpointDiscovery, getVoidLogger, + ServerTokenManager, } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { GetEntitiesResponse } from '@backstage/catalog-client'; @@ -104,6 +105,7 @@ const handlerContext = { discovery, logger: getVoidLogger(), config: ConfigReader.fromConfigs([]), + tokenManager: ServerTokenManager.noop(), }; const entityFactRetriever = entityMetadataFactRetriever; diff --git a/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityMetadataFactRetriever.ts b/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityMetadataFactRetriever.ts index 26b1e4274b..caa19dbeaf 100644 --- a/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityMetadataFactRetriever.ts +++ b/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityMetadataFactRetriever.ts @@ -44,11 +44,19 @@ export const entityMetadataFactRetriever: FactRetriever = { description: 'The entity has tags in metadata', }, }, - handler: async ({ discovery, entityFilter }: FactRetrieverContext) => { + handler: async ({ + discovery, + entityFilter, + tokenManager, + }: FactRetrieverContext) => { + const { token } = await tokenManager.getToken(); const catalogClient = new CatalogClient({ discoveryApi: discovery, }); - const entities = await catalogClient.getEntities({ filter: entityFilter }); + const entities = await catalogClient.getEntities( + { filter: entityFilter }, + { token }, + ); return entities.items.map((entity: Entity) => { return { diff --git a/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityOwnershipFactRetriever.test.ts b/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityOwnershipFactRetriever.test.ts index 555f761ae8..7a77ef91c4 100644 --- a/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityOwnershipFactRetriever.test.ts +++ b/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityOwnershipFactRetriever.test.ts @@ -19,6 +19,7 @@ import { RELATION_OWNED_BY } from '@backstage/catalog-model'; import { PluginEndpointDiscovery, getVoidLogger, + ServerTokenManager, } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { GetEntitiesResponse } from '@backstage/catalog-client'; @@ -104,6 +105,7 @@ const handlerContext = { discovery, logger: getVoidLogger(), config: ConfigReader.fromConfigs([]), + tokenManager: ServerTokenManager.noop(), }; const entityFactRetriever = entityOwnershipFactRetriever; diff --git a/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityOwnershipFactRetriever.ts b/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityOwnershipFactRetriever.ts index b9a91e67f7..c1e9b2710e 100644 --- a/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityOwnershipFactRetriever.ts +++ b/plugins/tech-insights-backend/src/service/fact/factRetrievers/entityOwnershipFactRetriever.ts @@ -42,11 +42,19 @@ export const entityOwnershipFactRetriever: FactRetriever = { description: 'The spec.owner field is set and refers to a group', }, }, - handler: async ({ discovery, entityFilter }: FactRetrieverContext) => { + handler: async ({ + discovery, + entityFilter, + tokenManager, + }: FactRetrieverContext) => { + const { token } = await tokenManager.getToken(); const catalogClient = new CatalogClient({ discoveryApi: discovery, }); - const entities = await catalogClient.getEntities({ filter: entityFilter }); + const entities = await catalogClient.getEntities( + { filter: entityFilter }, + { token }, + ); return entities.items.map((entity: Entity) => { return { diff --git a/plugins/tech-insights-backend/src/service/fact/factRetrievers/techdocsFactRetriever.test.ts b/plugins/tech-insights-backend/src/service/fact/factRetrievers/techdocsFactRetriever.test.ts index be9397942d..0c70f6c9f1 100644 --- a/plugins/tech-insights-backend/src/service/fact/factRetrievers/techdocsFactRetriever.test.ts +++ b/plugins/tech-insights-backend/src/service/fact/factRetrievers/techdocsFactRetriever.test.ts @@ -19,6 +19,7 @@ import { RELATION_OWNED_BY } from '@backstage/catalog-model'; import { PluginEndpointDiscovery, getVoidLogger, + ServerTokenManager, } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { GetEntitiesResponse } from '@backstage/catalog-client'; @@ -104,6 +105,7 @@ const handlerContext = { discovery, logger: getVoidLogger(), config: ConfigReader.fromConfigs([]), + tokenManager: ServerTokenManager.noop(), }; const entityFactRetriever = techdocsFactRetriever; diff --git a/plugins/tech-insights-backend/src/service/fact/factRetrievers/techdocsFactRetriever.ts b/plugins/tech-insights-backend/src/service/fact/factRetrievers/techdocsFactRetriever.ts index 2717f94475..6bc84f4aa9 100644 --- a/plugins/tech-insights-backend/src/service/fact/factRetrievers/techdocsFactRetriever.ts +++ b/plugins/tech-insights-backend/src/service/fact/factRetrievers/techdocsFactRetriever.ts @@ -40,11 +40,19 @@ export const techdocsFactRetriever: FactRetriever = { description: 'The entity has a title in metadata', }, }, - handler: async ({ discovery, entityFilter }: FactRetrieverContext) => { + handler: async ({ + discovery, + entityFilter, + tokenManager, + }: FactRetrieverContext) => { + const { token } = await tokenManager.getToken(); const catalogClient = new CatalogClient({ discoveryApi: discovery, }); - const entities = await catalogClient.getEntities({ filter: entityFilter }); + const entities = await catalogClient.getEntities( + { filter: entityFilter }, + { token }, + ); return entities.items.map((entity: Entity) => { return { diff --git a/plugins/tech-insights-backend/src/service/router.test.ts b/plugins/tech-insights-backend/src/service/router.test.ts index df2d471516..8513973598 100644 --- a/plugins/tech-insights-backend/src/service/router.test.ts +++ b/plugins/tech-insights-backend/src/service/router.test.ts @@ -19,6 +19,7 @@ import { DatabaseManager, getVoidLogger, PluginDatabaseManager, + ServerTokenManager, } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import request from 'supertest'; @@ -74,6 +75,7 @@ describe('Tech Insights router tests', () => { getBaseUrl: (_: string) => Promise.resolve('http://mock.url'), getExternalBaseUrl: (_: string) => Promise.resolve('http://mock.url'), }, + tokenManager: ServerTokenManager.noop(), }); const router = await createRouter({ diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts index 4f8f2ed928..e22bfbd253 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts @@ -21,6 +21,7 @@ import { Config } from '@backstage/config'; import { PluginDatabaseManager, PluginEndpointDiscovery, + TokenManager, } from '@backstage/backend-common'; import { FactChecker, @@ -63,6 +64,7 @@ export interface TechInsightsOptions< discovery: PluginEndpointDiscovery; database: PluginDatabaseManager; scheduler: PluginTaskScheduler; + tokenManager: TokenManager; } /** @@ -104,6 +106,7 @@ export const buildTechInsightsContext = async < database, logger, scheduler, + tokenManager, } = options; const factRetrieverRegistry = new FactRetrieverRegistry(factRetrievers); @@ -121,6 +124,7 @@ export const buildTechInsightsContext = async < config, discovery, logger, + tokenManager, }, }); diff --git a/plugins/tech-insights-node/src/facts.ts b/plugins/tech-insights-node/src/facts.ts index a5df4bae85..ffd3549bd5 100644 --- a/plugins/tech-insights-node/src/facts.ts +++ b/plugins/tech-insights-node/src/facts.ts @@ -15,7 +15,10 @@ */ import { DateTime, Duration, DurationLike } from 'luxon'; import { Config } from '@backstage/config'; -import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { + PluginEndpointDiscovery, + TokenManager, +} from '@backstage/backend-common'; import { Logger } from 'winston'; /** @@ -135,6 +138,7 @@ export type FactRetrieverContext = { config: Config; discovery: PluginEndpointDiscovery; logger: Logger; + tokenManager: TokenManager; entityFilter?: | Record[] | Record;