feat(tech-insights): make tokenManager available on FactRetrieverContext

Signed-off-by: Chris Trombley <ctrombley@gmail.com>
This commit is contained in:
Chris Trombley
2022-04-25 18:29:17 -07:00
parent 47bac22cdc
commit a50b6474a7
12 changed files with 60 additions and 10 deletions
@@ -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.
@@ -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
});
+11 -3
View File
@@ -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_*_*_*
@@ -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;
@@ -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 {
@@ -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;
@@ -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 {
@@ -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;
@@ -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 {
@@ -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({
@@ -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,
},
});
+5 -1
View File
@@ -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<string, string | symbol | (string | symbol)[]>[]
| Record<string, string | symbol | (string | symbol)[]>;