feat(tech-insights): make tokenManager available on FactRetrieverContext
Signed-off-by: Chris Trombley <ctrombley@gmail.com>
This commit is contained in:
@@ -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
|
||||
});
|
||||
|
||||
@@ -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_*_*_*
|
||||
|
||||
+2
@@ -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;
|
||||
|
||||
+10
-2
@@ -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 {
|
||||
|
||||
+2
@@ -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;
|
||||
|
||||
+10
-2
@@ -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 {
|
||||
|
||||
+2
@@ -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;
|
||||
|
||||
+10
-2
@@ -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,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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)[]>;
|
||||
|
||||
Reference in New Issue
Block a user