@backstage/plugin-catalog-backend-module-incremental-ingestion 0.6.1-next.1 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -0
- package/dist/index.d.ts +5 -9
- package/dist/module/WrapperProviders.cjs.js +4 -3
- package/dist/module/WrapperProviders.cjs.js.map +1 -1
- package/dist/module/catalogModuleIncrementalIngestionEntityProvider.cjs.js +1 -1
- package/dist/module/catalogModuleIncrementalIngestionEntityProvider.cjs.js.map +1 -1
- package/dist/router/routes.cjs.js +10 -4
- package/dist/router/routes.cjs.js.map +1 -1
- package/dist/service/IncrementalCatalogBuilder.cjs.js +2 -1
- package/dist/service/IncrementalCatalogBuilder.cjs.js.map +1 -1
- package/package.json +14 -15
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# @backstage/plugin-catalog-backend-module-incremental-ingestion
|
|
2
2
|
|
|
3
|
+
## 0.6.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- dfc8b41: Updated dependency `@opentelemetry/api` to `^1.9.0`.
|
|
8
|
+
- cce9cae: Deprecate old-backend-system `IncrementalCatalogBuilder`
|
|
9
|
+
- fe87fbf: Add task metrics as two gauges that track the last start and end timestamps as epoch seconds.
|
|
10
|
+
- 5aa44d2: Wire up the events together in the new backend system
|
|
11
|
+
- d42ecb0: Remove backend-common package from incremental-ingestion plugin and update related code
|
|
12
|
+
- cbfc69e: Create a `dev/index.ts` entrypoint for `yarn start`
|
|
13
|
+
- 3ca5f70: Ensure that the scheduled worker task doesn't run at an unreasonably high frequency
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
- @backstage/backend-defaults@0.6.0
|
|
16
|
+
- @backstage/plugin-catalog-backend@1.29.0
|
|
17
|
+
- @backstage/backend-plugin-api@1.1.0
|
|
18
|
+
- @backstage/plugin-catalog-node@1.15.0
|
|
19
|
+
- @backstage/plugin-events-node@0.4.6
|
|
20
|
+
- @backstage/errors@1.2.6
|
|
21
|
+
- @backstage/catalog-model@1.7.2
|
|
22
|
+
- @backstage/config@1.3.1
|
|
23
|
+
- @backstage/types@1.2.0
|
|
24
|
+
- @backstage/plugin-permission-common@0.8.3
|
|
25
|
+
|
|
26
|
+
## 0.6.1-next.2
|
|
27
|
+
|
|
28
|
+
### Patch Changes
|
|
29
|
+
|
|
30
|
+
- dfc8b41: Updated dependency `@opentelemetry/api` to `^1.9.0`.
|
|
31
|
+
- d42ecb0: Remove backend-common package from incremental-ingestion plugin and update related code
|
|
32
|
+
- Updated dependencies
|
|
33
|
+
- @backstage/backend-defaults@0.6.0-next.2
|
|
34
|
+
- @backstage/plugin-catalog-backend@1.29.0-next.2
|
|
35
|
+
- @backstage/backend-plugin-api@1.1.0-next.2
|
|
36
|
+
- @backstage/errors@1.2.6-next.0
|
|
37
|
+
- @backstage/plugin-catalog-node@1.15.0-next.2
|
|
38
|
+
- @backstage/plugin-events-node@0.4.6-next.2
|
|
39
|
+
- @backstage/catalog-model@1.7.2-next.0
|
|
40
|
+
- @backstage/config@1.3.1-next.0
|
|
41
|
+
- @backstage/types@1.2.0
|
|
42
|
+
- @backstage/plugin-permission-common@0.8.3-next.0
|
|
43
|
+
|
|
3
44
|
## 0.6.1-next.1
|
|
4
45
|
|
|
5
46
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
/// <reference types="express" />
|
|
2
2
|
import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
|
|
3
|
-
import { SchedulerService, UrlReaderService } from '@backstage/backend-plugin-api';
|
|
3
|
+
import { RootLoggerService, DatabaseService, SchedulerService, RootConfigService, UrlReaderService, PermissionsService } from '@backstage/backend-plugin-api';
|
|
4
4
|
import { IncrementalEntityProviderOptions as IncrementalEntityProviderOptions$1, IncrementalEntityProvider as IncrementalEntityProvider$1 } from '@backstage/plugin-catalog-backend-module-incremental-ingestion';
|
|
5
5
|
import * as express from 'express';
|
|
6
|
-
import { PluginDatabaseManager } from '@backstage/backend-common';
|
|
7
|
-
import { Config } from '@backstage/config';
|
|
8
6
|
import { DeferredEntity } from '@backstage/plugin-catalog-node';
|
|
9
7
|
import { EventParams, EventSubscriber } from '@backstage/plugin-events-node';
|
|
10
|
-
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
|
|
11
|
-
import { Logger } from 'winston';
|
|
12
8
|
import { HumanDuration } from '@backstage/types';
|
|
13
9
|
import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
|
|
14
10
|
|
|
@@ -201,12 +197,12 @@ interface IncrementalEntityProviderOptions {
|
|
|
201
197
|
}
|
|
202
198
|
/** @public */
|
|
203
199
|
type PluginEnvironment = {
|
|
204
|
-
logger:
|
|
205
|
-
database:
|
|
200
|
+
logger: RootLoggerService;
|
|
201
|
+
database: DatabaseService;
|
|
206
202
|
scheduler: SchedulerService;
|
|
207
|
-
config:
|
|
203
|
+
config: RootConfigService;
|
|
208
204
|
reader: UrlReaderService;
|
|
209
|
-
permissions:
|
|
205
|
+
permissions: PermissionsService;
|
|
210
206
|
};
|
|
211
207
|
|
|
212
208
|
/**
|
|
@@ -28,10 +28,11 @@ class WrapperProviders {
|
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
-
|
|
32
|
-
return
|
|
31
|
+
adminRouter() {
|
|
32
|
+
return new routes.IncrementalProviderRouter(
|
|
33
33
|
new IncrementalIngestionDatabaseManager.IncrementalIngestionDatabaseManager({ client: this.options.client }),
|
|
34
|
-
this.options.logger
|
|
34
|
+
this.options.logger,
|
|
35
|
+
this.options.config
|
|
35
36
|
).createRouter();
|
|
36
37
|
}
|
|
37
38
|
async startProvider(provider, providerOptions, connection) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WrapperProviders.cjs.js","sources":["../../src/module/WrapperProviders.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n LoggerService,\n RootConfigService,\n SchedulerService,\n} from '@backstage/backend-plugin-api';\nimport { stringifyError } from '@backstage/errors';\nimport {\n EntityProvider,\n EntityProviderConnection,\n} from '@backstage/plugin-catalog-node';\nimport { createDeferred } from '@backstage/types';\nimport express from 'express';\nimport { Knex } from 'knex';\nimport { Duration } from 'luxon';\nimport { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager';\nimport { applyDatabaseMigrations } from '../database/migrations';\nimport { IncrementalIngestionEngine } from '../engine/IncrementalIngestionEngine';\nimport { IncrementalProviderRouter } from '../router/routes';\nimport {\n IncrementalEntityProvider,\n IncrementalEntityProviderOptions,\n} from '../types';\nimport { EventsService } from '@backstage/plugin-events-node';\n\n/**\n * Helps in the creation of the catalog entity providers that wrap the\n * incremental ones.\n */\nexport class WrapperProviders {\n private migrate: Promise<void> | undefined;\n private numberOfProvidersToConnect = 0;\n private readonly readySignal = createDeferred();\n\n constructor(\n private readonly options: {\n config: RootConfigService;\n logger: LoggerService;\n client: Knex;\n scheduler: SchedulerService;\n applyDatabaseMigrations?: typeof applyDatabaseMigrations;\n events: EventsService;\n },\n ) {}\n\n wrap(\n provider: IncrementalEntityProvider<unknown, unknown>,\n options: IncrementalEntityProviderOptions,\n ): EntityProvider {\n this.numberOfProvidersToConnect += 1;\n return {\n getProviderName: () => provider.getProviderName(),\n connect: async connection => {\n await this.startProvider(provider, options, connection);\n this.numberOfProvidersToConnect -= 1;\n if (this.numberOfProvidersToConnect === 0) {\n this.readySignal.resolve();\n }\n },\n };\n }\n\n
|
|
1
|
+
{"version":3,"file":"WrapperProviders.cjs.js","sources":["../../src/module/WrapperProviders.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n LoggerService,\n RootConfigService,\n SchedulerService,\n} from '@backstage/backend-plugin-api';\nimport { stringifyError } from '@backstage/errors';\nimport {\n EntityProvider,\n EntityProviderConnection,\n} from '@backstage/plugin-catalog-node';\nimport { createDeferred } from '@backstage/types';\nimport express from 'express';\nimport { Knex } from 'knex';\nimport { Duration } from 'luxon';\nimport { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager';\nimport { applyDatabaseMigrations } from '../database/migrations';\nimport { IncrementalIngestionEngine } from '../engine/IncrementalIngestionEngine';\nimport { IncrementalProviderRouter } from '../router/routes';\nimport {\n IncrementalEntityProvider,\n IncrementalEntityProviderOptions,\n} from '../types';\nimport { EventsService } from '@backstage/plugin-events-node';\n\n/**\n * Helps in the creation of the catalog entity providers that wrap the\n * incremental ones.\n */\nexport class WrapperProviders {\n private migrate: Promise<void> | undefined;\n private numberOfProvidersToConnect = 0;\n private readonly readySignal = createDeferred();\n\n constructor(\n private readonly options: {\n config: RootConfigService;\n logger: LoggerService;\n client: Knex;\n scheduler: SchedulerService;\n applyDatabaseMigrations?: typeof applyDatabaseMigrations;\n events: EventsService;\n },\n ) {}\n\n wrap(\n provider: IncrementalEntityProvider<unknown, unknown>,\n options: IncrementalEntityProviderOptions,\n ): EntityProvider {\n this.numberOfProvidersToConnect += 1;\n return {\n getProviderName: () => provider.getProviderName(),\n connect: async connection => {\n await this.startProvider(provider, options, connection);\n this.numberOfProvidersToConnect -= 1;\n if (this.numberOfProvidersToConnect === 0) {\n this.readySignal.resolve();\n }\n },\n };\n }\n\n adminRouter(): express.Router {\n return new IncrementalProviderRouter(\n new IncrementalIngestionDatabaseManager({ client: this.options.client }),\n this.options.logger,\n this.options.config,\n ).createRouter();\n }\n\n private async startProvider(\n provider: IncrementalEntityProvider<unknown, unknown>,\n providerOptions: IncrementalEntityProviderOptions,\n connection: EntityProviderConnection,\n ) {\n const logger = this.options.logger.child({\n entityProvider: provider.getProviderName(),\n });\n\n try {\n if (!this.migrate) {\n this.migrate = Promise.resolve().then(async () => {\n const apply =\n this.options.applyDatabaseMigrations ?? applyDatabaseMigrations;\n await apply(this.options.client);\n });\n }\n\n await this.migrate;\n\n const { burstInterval, burstLength, restLength } = providerOptions;\n\n logger.info(`Connecting`);\n\n const manager = new IncrementalIngestionDatabaseManager({\n client: this.options.client,\n });\n const engine = new IncrementalIngestionEngine({\n ...providerOptions,\n ready: this.readySignal,\n manager,\n logger,\n provider,\n restLength,\n connection,\n });\n\n let frequency = Duration.isDuration(burstInterval)\n ? burstInterval\n : Duration.fromObject(burstInterval);\n if (frequency.as('milliseconds') < 5000) {\n frequency = Duration.fromObject({ seconds: 5 }); // don't let it be silly low, to not overload the scheduler\n }\n\n let length = Duration.isDuration(burstLength)\n ? burstLength\n : Duration.fromObject(burstLength);\n length = length.plus(Duration.fromObject({ minutes: 1 })); // some margin from the actual completion\n\n await this.options.scheduler.scheduleTask({\n id: provider.getProviderName(),\n fn: engine.taskFn.bind(engine),\n frequency,\n timeout: length,\n });\n\n const topics = engine.supportsEventTopics();\n if (topics.length > 0) {\n logger.info(\n `Provider ${provider.getProviderName()} subscribing to events for topics: ${topics.join(\n ',',\n )}`,\n );\n await this.options.events.subscribe({\n topics,\n id: `catalog-backend-module-incremental-ingestion:${provider.getProviderName()}`,\n onEvent: evt => engine.onEvent(evt),\n });\n }\n } catch (error) {\n logger.warn(\n `Failed to initialize incremental ingestion provider ${provider.getProviderName()}, ${stringifyError(\n error,\n )}`,\n );\n throw error;\n }\n }\n}\n"],"names":["createDeferred","IncrementalProviderRouter","IncrementalIngestionDatabaseManager","applyDatabaseMigrations","IncrementalIngestionEngine","Duration","stringifyError"],"mappings":"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"}
|
|
@@ -49,7 +49,7 @@ const catalogModuleIncrementalIngestionEntityProvider = backendPluginApi.createB
|
|
|
49
49
|
const wrapped = providers.wrap(entry.provider, entry.options);
|
|
50
50
|
catalog.addEntityProvider(wrapped);
|
|
51
51
|
}
|
|
52
|
-
httpRouter.use(
|
|
52
|
+
httpRouter.use(providers.adminRouter());
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogModuleIncrementalIngestionEntityProvider.cjs.js","sources":["../../src/module/catalogModuleIncrementalIngestionEntityProvider.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n coreServices,\n createBackendModule,\n createExtensionPoint,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';\nimport {\n IncrementalEntityProvider,\n IncrementalEntityProviderOptions,\n} from '@backstage/plugin-catalog-backend-module-incremental-ingestion';\nimport { WrapperProviders } from './WrapperProviders';\nimport { eventsServiceRef } from '@backstage/plugin-events-node';\n\n/**\n * @public\n * Interface for {@link incrementalIngestionProvidersExtensionPoint}.\n */\nexport interface IncrementalIngestionProviderExtensionPoint {\n /** Adds a new incremental entity provider */\n addProvider<TCursor, TContext>(config: {\n options: IncrementalEntityProviderOptions;\n provider: IncrementalEntityProvider<TCursor, TContext>;\n }): void;\n}\n\n/**\n * @public\n *\n * Extension point for registering incremental ingestion providers.\n * The `catalogModuleIncrementalIngestionEntityProvider` must be installed for these providers to work.\n *\n * @example\n *\n * ```ts\n * backend.add(createBackendModule({\n * pluginId: 'catalog',\n * moduleId: 'my-incremental-provider',\n * register(env) {\n * env.registerInit({\n * deps: {\n * extension: incrementalIngestionProvidersExtensionPoint,\n * },\n * async init({ extension }) {\n * extension.addProvider({\n * burstInterval: ...,\n * burstLength: ...,\n * restLength: ...,\n * }, {\n * next(context, cursor) {\n * ...\n * },\n * ...\n * })\n * })\n * })\n * }\n * }))\n * ```\n */\nexport const incrementalIngestionProvidersExtensionPoint =\n createExtensionPoint<IncrementalIngestionProviderExtensionPoint>({\n id: 'catalog.incrementalIngestionProvider.providers',\n });\n\n/**\n * Registers the incremental entity provider with the catalog processing extension point.\n *\n * @public\n */\nexport const catalogModuleIncrementalIngestionEntityProvider =\n createBackendModule({\n pluginId: 'catalog',\n moduleId: 'incremental-ingestion-entity-provider',\n register(env) {\n const addedProviders = new Array<{\n provider: IncrementalEntityProvider<unknown, unknown>;\n options: IncrementalEntityProviderOptions;\n }>();\n\n env.registerExtensionPoint(incrementalIngestionProvidersExtensionPoint, {\n addProvider({ options, provider }) {\n addedProviders.push({ options, provider });\n },\n });\n\n env.registerInit({\n deps: {\n catalog: catalogProcessingExtensionPoint,\n config: coreServices.rootConfig,\n database: coreServices.database,\n httpRouter: coreServices.httpRouter,\n logger: coreServices.logger,\n scheduler: coreServices.scheduler,\n events: eventsServiceRef,\n },\n async init({\n catalog,\n config,\n database,\n httpRouter,\n logger,\n scheduler,\n events,\n }) {\n const client = await database.getClient();\n\n const providers = new WrapperProviders({\n config,\n logger,\n client,\n scheduler,\n events,\n });\n\n for (const entry of addedProviders) {\n const wrapped = providers.wrap(entry.provider, entry.options);\n catalog.addEntityProvider(wrapped);\n }\n\n httpRouter.use(
|
|
1
|
+
{"version":3,"file":"catalogModuleIncrementalIngestionEntityProvider.cjs.js","sources":["../../src/module/catalogModuleIncrementalIngestionEntityProvider.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n coreServices,\n createBackendModule,\n createExtensionPoint,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';\nimport {\n IncrementalEntityProvider,\n IncrementalEntityProviderOptions,\n} from '@backstage/plugin-catalog-backend-module-incremental-ingestion';\nimport { WrapperProviders } from './WrapperProviders';\nimport { eventsServiceRef } from '@backstage/plugin-events-node';\n\n/**\n * @public\n * Interface for {@link incrementalIngestionProvidersExtensionPoint}.\n */\nexport interface IncrementalIngestionProviderExtensionPoint {\n /** Adds a new incremental entity provider */\n addProvider<TCursor, TContext>(config: {\n options: IncrementalEntityProviderOptions;\n provider: IncrementalEntityProvider<TCursor, TContext>;\n }): void;\n}\n\n/**\n * @public\n *\n * Extension point for registering incremental ingestion providers.\n * The `catalogModuleIncrementalIngestionEntityProvider` must be installed for these providers to work.\n *\n * @example\n *\n * ```ts\n * backend.add(createBackendModule({\n * pluginId: 'catalog',\n * moduleId: 'my-incremental-provider',\n * register(env) {\n * env.registerInit({\n * deps: {\n * extension: incrementalIngestionProvidersExtensionPoint,\n * },\n * async init({ extension }) {\n * extension.addProvider({\n * burstInterval: ...,\n * burstLength: ...,\n * restLength: ...,\n * }, {\n * next(context, cursor) {\n * ...\n * },\n * ...\n * })\n * })\n * })\n * }\n * }))\n * ```\n */\nexport const incrementalIngestionProvidersExtensionPoint =\n createExtensionPoint<IncrementalIngestionProviderExtensionPoint>({\n id: 'catalog.incrementalIngestionProvider.providers',\n });\n\n/**\n * Registers the incremental entity provider with the catalog processing extension point.\n *\n * @public\n */\nexport const catalogModuleIncrementalIngestionEntityProvider =\n createBackendModule({\n pluginId: 'catalog',\n moduleId: 'incremental-ingestion-entity-provider',\n register(env) {\n const addedProviders = new Array<{\n provider: IncrementalEntityProvider<unknown, unknown>;\n options: IncrementalEntityProviderOptions;\n }>();\n\n env.registerExtensionPoint(incrementalIngestionProvidersExtensionPoint, {\n addProvider({ options, provider }) {\n addedProviders.push({ options, provider });\n },\n });\n\n env.registerInit({\n deps: {\n catalog: catalogProcessingExtensionPoint,\n config: coreServices.rootConfig,\n database: coreServices.database,\n httpRouter: coreServices.httpRouter,\n logger: coreServices.logger,\n scheduler: coreServices.scheduler,\n events: eventsServiceRef,\n },\n async init({\n catalog,\n config,\n database,\n httpRouter,\n logger,\n scheduler,\n events,\n }) {\n const client = await database.getClient();\n\n const providers = new WrapperProviders({\n config,\n logger,\n client,\n scheduler,\n events,\n });\n\n for (const entry of addedProviders) {\n const wrapped = providers.wrap(entry.provider, entry.options);\n catalog.addEntityProvider(wrapped);\n }\n\n httpRouter.use(providers.adminRouter());\n },\n });\n },\n });\n"],"names":["createExtensionPoint","createBackendModule","catalogProcessingExtensionPoint","coreServices","eventsServiceRef","WrapperProviders"],"mappings":";;;;;;;AA2EO,MAAM,8CACXA,qCAAiE,CAAA;AAAA,EAC/D,EAAI,EAAA;AACN,CAAC;AAOI,MAAM,kDACXC,oCAAoB,CAAA;AAAA,EAClB,QAAU,EAAA,SAAA;AAAA,EACV,QAAU,EAAA,uCAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAM,MAAA,cAAA,GAAiB,IAAI,KAGxB,EAAA;AAEH,IAAA,GAAA,CAAI,uBAAuB,2CAA6C,EAAA;AAAA,MACtE,WAAY,CAAA,EAAE,OAAS,EAAA,QAAA,EAAY,EAAA;AACjC,QAAA,cAAA,CAAe,IAAK,CAAA,EAAE,OAAS,EAAA,QAAA,EAAU,CAAA;AAAA;AAC3C,KACD,CAAA;AAED,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,OAAS,EAAAC,qCAAA;AAAA,QACT,QAAQC,6BAAa,CAAA,UAAA;AAAA,QACrB,UAAUA,6BAAa,CAAA,QAAA;AAAA,QACvB,YAAYA,6BAAa,CAAA,UAAA;AAAA,QACzB,QAAQA,6BAAa,CAAA,MAAA;AAAA,QACrB,WAAWA,6BAAa,CAAA,SAAA;AAAA,QACxB,MAAQ,EAAAC;AAAA,OACV;AAAA,MACA,MAAM,IAAK,CAAA;AAAA,QACT,OAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACC,EAAA;AACD,QAAM,MAAA,MAAA,GAAS,MAAM,QAAA,CAAS,SAAU,EAAA;AAExC,QAAM,MAAA,SAAA,GAAY,IAAIC,iCAAiB,CAAA;AAAA,UACrC,MAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA;AAAA,UACA;AAAA,SACD,CAAA;AAED,QAAA,KAAA,MAAW,SAAS,cAAgB,EAAA;AAClC,UAAA,MAAM,UAAU,SAAU,CAAA,IAAA,CAAK,KAAM,CAAA,QAAA,EAAU,MAAM,OAAO,CAAA;AAC5D,UAAA,OAAA,CAAQ,kBAAkB,OAAO,CAAA;AAAA;AAGnC,QAAW,UAAA,CAAA,GAAA,CAAI,SAAU,CAAA,WAAA,EAAa,CAAA;AAAA;AACxC,KACD,CAAA;AAAA;AAEL,CAAC;;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var backendCommon = require('@backstage/backend-common');
|
|
4
3
|
var express = require('express');
|
|
5
4
|
var Router = require('express-promise-router');
|
|
5
|
+
var rootHttpRouter = require('@backstage/backend-defaults/rootHttpRouter');
|
|
6
6
|
|
|
7
7
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
8
8
|
|
|
@@ -12,11 +12,13 @@ var Router__default = /*#__PURE__*/_interopDefaultCompat(Router);
|
|
|
12
12
|
class IncrementalProviderRouter {
|
|
13
13
|
manager;
|
|
14
14
|
logger;
|
|
15
|
-
|
|
15
|
+
config;
|
|
16
|
+
constructor(manager, logger, config) {
|
|
16
17
|
this.manager = manager;
|
|
17
18
|
this.logger = logger;
|
|
19
|
+
this.config = config;
|
|
18
20
|
}
|
|
19
|
-
|
|
21
|
+
createRouter() {
|
|
20
22
|
const router = Router__default.default();
|
|
21
23
|
router.use(express__default.default.json());
|
|
22
24
|
router.get("/incremental/health", async (_, res) => {
|
|
@@ -209,7 +211,11 @@ class IncrementalProviderRouter {
|
|
|
209
211
|
});
|
|
210
212
|
}
|
|
211
213
|
);
|
|
212
|
-
|
|
214
|
+
const middleware = rootHttpRouter.MiddlewareFactory.create({
|
|
215
|
+
logger: this.logger,
|
|
216
|
+
config: this.config
|
|
217
|
+
});
|
|
218
|
+
router.use(middleware.error());
|
|
213
219
|
return router;
|
|
214
220
|
}
|
|
215
221
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.cjs.js","sources":["../../src/router/routes.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { errorHandler } from '@backstage/backend-common';\nimport express from 'express';\nimport Router from 'express-promise-router';\nimport { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager';\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nexport class IncrementalProviderRouter {\n private manager: IncrementalIngestionDatabaseManager;\n private logger: LoggerService;\n\n constructor(\n manager: IncrementalIngestionDatabaseManager,\n logger: LoggerService,\n ) {\n this.manager = manager;\n this.logger = logger;\n }\n\n async createRouter() {\n const router = Router();\n router.use(express.json());\n\n // Get the overall health of all incremental providers\n router.get('/incremental/health', async (_, res) => {\n const records = await this.manager.healthcheck();\n const providers = records.map(record => record.provider_name);\n const duplicates = [\n ...new Set(providers.filter((e, i, a) => a.indexOf(e) !== i)),\n ];\n\n if (duplicates.length > 0) {\n res.json({ healthy: false, duplicateIngestions: duplicates });\n } else {\n res.json({ healthy: true });\n }\n });\n\n // Clean up and pause all providers\n router.post('/incremental/cleanup', async (_, res) => {\n const result = await this.manager.cleanupProviders();\n res.json(result);\n });\n\n // Get basic status of the provider\n router.get('/incremental/providers/:provider', async (req, res) => {\n const { provider } = req.params;\n const record = await this.manager.getCurrentIngestionRecord(provider);\n if (record) {\n res.json({\n success: true,\n status: {\n current_action: record.status,\n next_action_at: new Date(record.next_action_at),\n },\n last_error: record.last_error,\n });\n } else {\n const providers: string[] = await this.manager.listProviders();\n if (providers.includes(provider)) {\n res.json({\n success: true,\n status: {\n current_action: 'rest complete, waiting to start',\n },\n });\n } else {\n this.logger.error(\n `${provider} - No ingestion record found in the database!`,\n );\n res.status(404).json({\n success: false,\n status: {},\n last_error: `Provider '${provider}' not found`,\n });\n }\n }\n });\n\n // Trigger the provider's next action\n router.post(\n `/incremental/providers/:provider/trigger`,\n async (req, res) => {\n const { provider } = req.params;\n const record = await this.manager.getCurrentIngestionRecord(provider);\n if (record) {\n await this.manager.triggerNextProviderAction(provider);\n res.json({\n success: true,\n message: `${provider}: Next action triggered.`,\n });\n } else {\n const providers: string[] = await this.manager.listProviders();\n if (providers.includes(provider)) {\n this.logger.debug(`${provider} - Ingestion record found`);\n res.json({\n success: true,\n message: 'Unable to trigger next action (provider is restarting)',\n });\n } else {\n res.status(404).json({\n success: false,\n message: `Provider '${provider}' not found`,\n });\n }\n }\n },\n );\n\n // Start a brand-new ingestion cycle for the provider.\n // (Cancel's the current run if active, or marks it complete if resting)\n router.post(`/incremental/providers/:provider/start`, async (req, res) => {\n const { provider } = req.params;\n\n const record = await this.manager.getCurrentIngestionRecord(provider);\n if (record) {\n const ingestionId = record.id;\n if (record.status === 'resting') {\n await this.manager.setProviderComplete(ingestionId);\n } else {\n await this.manager.setProviderCanceling(ingestionId);\n }\n res.json({\n success: true,\n message: `${provider}: Next cycle triggered.`,\n });\n } else {\n const providers: string[] = await this.manager.listProviders();\n if (providers.includes(provider)) {\n this.logger.debug(`${provider} - Ingestion record found`);\n res.json({\n success: true,\n message: 'Provider is already restarting',\n });\n } else {\n res.status(404).json({\n success: false,\n message: `Provider '${provider}' not found`,\n });\n }\n }\n });\n\n router.get(`/incremental/providers`, async (_req, res) => {\n const providers = await this.manager.listProviders();\n\n res.json({\n success: true,\n providers,\n });\n });\n\n // Stop the provider and pause it for 24 hours\n router.post(`/incremental/providers/:provider/cancel`, async (req, res) => {\n const { provider } = req.params;\n const record = await this.manager.getCurrentIngestionRecord(provider);\n if (record) {\n const next_action_at = new Date();\n next_action_at.setTime(next_action_at.getTime() + 24 * 60 * 60 * 1000);\n await this.manager.updateByName(provider, {\n next_action: 'nothing (done)',\n ingestion_completed_at: new Date(),\n next_action_at,\n status: 'resting',\n });\n res.json({\n success: true,\n message: `${provider}: Current ingestion canceled.`,\n });\n } else {\n const providers: string[] = await this.manager.listProviders();\n if (providers.includes(provider)) {\n this.logger.debug(`${provider} - Ingestion record found`);\n res.json({\n success: true,\n message: 'Provider is currently restarting, please wait.',\n });\n } else {\n res.status(404).json({\n success: false,\n message: `Provider '${provider}' not found`,\n });\n }\n }\n });\n\n // Wipe out all ingestion records for the provider and pause for 24 hours\n router.delete('/incremental/providers/:provider', async (req, res) => {\n const { provider } = req.params;\n const result = await this.manager.purgeAndResetProvider(provider);\n res.json(result);\n });\n\n // Get the ingestion marks for the current cycle\n router.get(`/incremental/providers/:provider/marks`, async (req, res) => {\n const { provider } = req.params;\n const record = await this.manager.getCurrentIngestionRecord(provider);\n if (record) {\n const id = record.id;\n const records = await this.manager.getAllMarks(id);\n res.json({ success: true, records });\n } else {\n const providers: string[] = await this.manager.listProviders();\n if (providers.includes(provider)) {\n this.logger.debug(`${provider} - Ingestion record found`);\n res.json({\n success: true,\n message: 'No records yet (provider is restarting)',\n });\n } else {\n this.logger.error(\n `${provider} - No ingestion record found in the database!`,\n );\n res.status(404).json({\n success: false,\n status: {},\n last_error: `Provider '${provider}' not found`,\n });\n }\n }\n });\n\n router.delete(\n `/incremental/providers/:provider/marks`,\n async (req, res) => {\n const { provider } = req.params;\n const deletions = await this.manager.clearFinishedIngestions(provider);\n\n res.json({\n success: true,\n message: `Expired marks for provider '${provider}' removed.`,\n deletions,\n });\n },\n );\n\n router.use(errorHandler());\n\n return router;\n }\n}\n"],"names":["Router","express","errorHandler"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.cjs.js","sources":["../../src/router/routes.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport express from 'express';\nimport Router from 'express-promise-router';\nimport { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager';\nimport { LoggerService } from '@backstage/backend-plugin-api';\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport { Config } from '@backstage/config';\n\nexport class IncrementalProviderRouter {\n private manager: IncrementalIngestionDatabaseManager;\n private logger: LoggerService;\n private config: Config;\n\n constructor(\n manager: IncrementalIngestionDatabaseManager,\n logger: LoggerService,\n config: Config,\n ) {\n this.manager = manager;\n this.logger = logger;\n this.config = config;\n }\n\n createRouter(): express.Router {\n const router = Router();\n router.use(express.json());\n\n // Get the overall health of all incremental providers\n router.get('/incremental/health', async (_, res) => {\n const records = await this.manager.healthcheck();\n const providers = records.map(record => record.provider_name);\n const duplicates = [\n ...new Set(providers.filter((e, i, a) => a.indexOf(e) !== i)),\n ];\n\n if (duplicates.length > 0) {\n res.json({ healthy: false, duplicateIngestions: duplicates });\n } else {\n res.json({ healthy: true });\n }\n });\n\n // Clean up and pause all providers\n router.post('/incremental/cleanup', async (_, res) => {\n const result = await this.manager.cleanupProviders();\n res.json(result);\n });\n\n // Get basic status of the provider\n router.get('/incremental/providers/:provider', async (req, res) => {\n const { provider } = req.params;\n const record = await this.manager.getCurrentIngestionRecord(provider);\n if (record) {\n res.json({\n success: true,\n status: {\n current_action: record.status,\n next_action_at: new Date(record.next_action_at),\n },\n last_error: record.last_error,\n });\n } else {\n const providers: string[] = await this.manager.listProviders();\n if (providers.includes(provider)) {\n res.json({\n success: true,\n status: {\n current_action: 'rest complete, waiting to start',\n },\n });\n } else {\n this.logger.error(\n `${provider} - No ingestion record found in the database!`,\n );\n res.status(404).json({\n success: false,\n status: {},\n last_error: `Provider '${provider}' not found`,\n });\n }\n }\n });\n\n // Trigger the provider's next action\n router.post(\n `/incremental/providers/:provider/trigger`,\n async (req, res) => {\n const { provider } = req.params;\n const record = await this.manager.getCurrentIngestionRecord(provider);\n if (record) {\n await this.manager.triggerNextProviderAction(provider);\n res.json({\n success: true,\n message: `${provider}: Next action triggered.`,\n });\n } else {\n const providers: string[] = await this.manager.listProviders();\n if (providers.includes(provider)) {\n this.logger.debug(`${provider} - Ingestion record found`);\n res.json({\n success: true,\n message: 'Unable to trigger next action (provider is restarting)',\n });\n } else {\n res.status(404).json({\n success: false,\n message: `Provider '${provider}' not found`,\n });\n }\n }\n },\n );\n\n // Start a brand-new ingestion cycle for the provider.\n // (Cancel's the current run if active, or marks it complete if resting)\n router.post(`/incremental/providers/:provider/start`, async (req, res) => {\n const { provider } = req.params;\n\n const record = await this.manager.getCurrentIngestionRecord(provider);\n if (record) {\n const ingestionId = record.id;\n if (record.status === 'resting') {\n await this.manager.setProviderComplete(ingestionId);\n } else {\n await this.manager.setProviderCanceling(ingestionId);\n }\n res.json({\n success: true,\n message: `${provider}: Next cycle triggered.`,\n });\n } else {\n const providers: string[] = await this.manager.listProviders();\n if (providers.includes(provider)) {\n this.logger.debug(`${provider} - Ingestion record found`);\n res.json({\n success: true,\n message: 'Provider is already restarting',\n });\n } else {\n res.status(404).json({\n success: false,\n message: `Provider '${provider}' not found`,\n });\n }\n }\n });\n\n router.get(`/incremental/providers`, async (_req, res) => {\n const providers = await this.manager.listProviders();\n\n res.json({\n success: true,\n providers,\n });\n });\n\n // Stop the provider and pause it for 24 hours\n router.post(`/incremental/providers/:provider/cancel`, async (req, res) => {\n const { provider } = req.params;\n const record = await this.manager.getCurrentIngestionRecord(provider);\n if (record) {\n const next_action_at = new Date();\n next_action_at.setTime(next_action_at.getTime() + 24 * 60 * 60 * 1000);\n await this.manager.updateByName(provider, {\n next_action: 'nothing (done)',\n ingestion_completed_at: new Date(),\n next_action_at,\n status: 'resting',\n });\n res.json({\n success: true,\n message: `${provider}: Current ingestion canceled.`,\n });\n } else {\n const providers: string[] = await this.manager.listProviders();\n if (providers.includes(provider)) {\n this.logger.debug(`${provider} - Ingestion record found`);\n res.json({\n success: true,\n message: 'Provider is currently restarting, please wait.',\n });\n } else {\n res.status(404).json({\n success: false,\n message: `Provider '${provider}' not found`,\n });\n }\n }\n });\n\n // Wipe out all ingestion records for the provider and pause for 24 hours\n router.delete('/incremental/providers/:provider', async (req, res) => {\n const { provider } = req.params;\n const result = await this.manager.purgeAndResetProvider(provider);\n res.json(result);\n });\n\n // Get the ingestion marks for the current cycle\n router.get(`/incremental/providers/:provider/marks`, async (req, res) => {\n const { provider } = req.params;\n const record = await this.manager.getCurrentIngestionRecord(provider);\n if (record) {\n const id = record.id;\n const records = await this.manager.getAllMarks(id);\n res.json({ success: true, records });\n } else {\n const providers: string[] = await this.manager.listProviders();\n if (providers.includes(provider)) {\n this.logger.debug(`${provider} - Ingestion record found`);\n res.json({\n success: true,\n message: 'No records yet (provider is restarting)',\n });\n } else {\n this.logger.error(\n `${provider} - No ingestion record found in the database!`,\n );\n res.status(404).json({\n success: false,\n status: {},\n last_error: `Provider '${provider}' not found`,\n });\n }\n }\n });\n\n router.delete(\n `/incremental/providers/:provider/marks`,\n async (req, res) => {\n const { provider } = req.params;\n const deletions = await this.manager.clearFinishedIngestions(provider);\n\n res.json({\n success: true,\n message: `Expired marks for provider '${provider}' removed.`,\n deletions,\n });\n },\n );\n\n const middleware = MiddlewareFactory.create({\n logger: this.logger,\n config: this.config,\n });\n router.use(middleware.error());\n\n return router;\n }\n}\n"],"names":["Router","express","MiddlewareFactory"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncrementalCatalogBuilder.cjs.js","sources":["../../src/service/IncrementalCatalogBuilder.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n IncrementalEntityProvider,\n IncrementalEntityProviderOptions,\n PluginEnvironment,\n} from '../types';\nimport { CatalogBuilder as CoreCatalogBuilder } from '@backstage/plugin-catalog-backend';\nimport { createDeferred } from '@backstage/types';\nimport { Duration } from 'luxon';\nimport { Knex } from 'knex';\nimport { IncrementalIngestionEngine } from '../engine/IncrementalIngestionEngine';\nimport { applyDatabaseMigrations } from '../database/migrations';\nimport { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager';\nimport { IncrementalProviderRouter } from '../router/routes';\nimport { EventParams, EventSubscriber } from '@backstage/plugin-events-node';\n\n/**\n * @public\n * @deprecated Please migrate to the new backend system and import `@backstage/plugin-catalog-backend-module-incremental-ingestion` as a module, and add providers to the `incrementalIngestionProvidersExtensionPoint` instead\n */\nexport class IncrementalCatalogBuilder {\n /**\n * Creates the incremental catalog builder, which extends the regular catalog builder.\n * @param env - PluginEnvironment\n * @param builder - CatalogBuilder\n * @returns IncrementalCatalogBuilder\n */\n static async create(env: PluginEnvironment, builder: CoreCatalogBuilder) {\n const client = await env.database.getClient();\n const manager = new IncrementalIngestionDatabaseManager({ client });\n return new IncrementalCatalogBuilder(env, builder, client, manager);\n }\n\n private ready = createDeferred();\n\n private constructor(\n private env: PluginEnvironment,\n private builder: CoreCatalogBuilder,\n private client: Knex,\n private manager: IncrementalIngestionDatabaseManager,\n ) {}\n\n async build() {\n await applyDatabaseMigrations(this.client);\n this.ready.resolve();\n\n const routerLogger = this.env.logger.child({\n router: 'IncrementalProviderAdmin',\n });\n\n const incrementalAdminRouter = await new IncrementalProviderRouter(\n this.manager,\n routerLogger,\n ).createRouter();\n\n return { incrementalAdminRouter };\n }\n\n addIncrementalEntityProvider<TCursor, TContext>(\n provider: IncrementalEntityProvider<TCursor, TContext>,\n options: IncrementalEntityProviderOptions,\n ): EventSubscriber {\n const { burstInterval, burstLength, restLength } = options;\n const { logger: catalogLogger, scheduler } = this.env;\n const ready = this.ready;\n\n const manager = this.manager;\n\n let engine: IncrementalIngestionEngine;\n\n this.builder.addEntityProvider({\n getProviderName: provider.getProviderName.bind(provider),\n async connect(connection) {\n const logger = catalogLogger.child({\n entityProvider: provider.getProviderName(),\n });\n\n engine = new IncrementalIngestionEngine({\n ...options,\n ready,\n manager,\n logger,\n provider,\n restLength,\n connection,\n });\n\n let frequency = Duration.isDuration(burstInterval)\n ? burstInterval\n : Duration.fromObject(burstInterval);\n if (frequency.as('milliseconds') < 5000) {\n frequency = Duration.fromObject({ seconds: 5 }); // don't let it be silly low, to not overload the scheduler\n }\n\n let length = Duration.isDuration(burstLength)\n ? burstLength\n : Duration.fromObject(burstLength);\n length = length.plus(Duration.fromObject({ minutes: 1 })); // some margin from the actual completion\n\n await scheduler.scheduleTask({\n id: provider.getProviderName(),\n fn: engine.taskFn.bind(engine),\n frequency,\n timeout: length,\n });\n },\n });\n\n return {\n onEvent: (params: EventParams) => engine.onEvent(params),\n supportsEventTopics() {\n return engine.supportsEventTopics();\n },\n };\n }\n}\n"],"names":["IncrementalIngestionDatabaseManager","createDeferred","applyDatabaseMigrations","IncrementalProviderRouter","IncrementalIngestionEngine","Duration"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IncrementalCatalogBuilder.cjs.js","sources":["../../src/service/IncrementalCatalogBuilder.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n IncrementalEntityProvider,\n IncrementalEntityProviderOptions,\n PluginEnvironment,\n} from '../types';\nimport { CatalogBuilder as CoreCatalogBuilder } from '@backstage/plugin-catalog-backend';\nimport { createDeferred } from '@backstage/types';\nimport { Duration } from 'luxon';\nimport { Knex } from 'knex';\nimport { IncrementalIngestionEngine } from '../engine/IncrementalIngestionEngine';\nimport { applyDatabaseMigrations } from '../database/migrations';\nimport { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager';\nimport { IncrementalProviderRouter } from '../router/routes';\nimport { EventParams, EventSubscriber } from '@backstage/plugin-events-node';\n\n/**\n * @public\n * @deprecated Please migrate to the new backend system and import `@backstage/plugin-catalog-backend-module-incremental-ingestion` as a module, and add providers to the `incrementalIngestionProvidersExtensionPoint` instead\n */\nexport class IncrementalCatalogBuilder {\n /**\n * Creates the incremental catalog builder, which extends the regular catalog builder.\n * @param env - PluginEnvironment\n * @param builder - CatalogBuilder\n * @returns IncrementalCatalogBuilder\n */\n static async create(env: PluginEnvironment, builder: CoreCatalogBuilder) {\n const client = await env.database.getClient();\n const manager = new IncrementalIngestionDatabaseManager({ client });\n return new IncrementalCatalogBuilder(env, builder, client, manager);\n }\n\n private ready = createDeferred();\n\n private constructor(\n private env: PluginEnvironment,\n private builder: CoreCatalogBuilder,\n private client: Knex,\n private manager: IncrementalIngestionDatabaseManager,\n ) {}\n\n async build() {\n await applyDatabaseMigrations(this.client);\n this.ready.resolve();\n\n const routerLogger = this.env.logger.child({\n router: 'IncrementalProviderAdmin',\n });\n\n const incrementalAdminRouter = await new IncrementalProviderRouter(\n this.manager,\n routerLogger,\n this.env.config,\n ).createRouter();\n\n return { incrementalAdminRouter };\n }\n\n addIncrementalEntityProvider<TCursor, TContext>(\n provider: IncrementalEntityProvider<TCursor, TContext>,\n options: IncrementalEntityProviderOptions,\n ): EventSubscriber {\n const { burstInterval, burstLength, restLength } = options;\n const { logger: catalogLogger, scheduler } = this.env;\n const ready = this.ready;\n\n const manager = this.manager;\n\n let engine: IncrementalIngestionEngine;\n\n this.builder.addEntityProvider({\n getProviderName: provider.getProviderName.bind(provider),\n async connect(connection) {\n const logger = catalogLogger.child({\n entityProvider: provider.getProviderName(),\n });\n\n engine = new IncrementalIngestionEngine({\n ...options,\n ready,\n manager,\n logger,\n provider,\n restLength,\n connection,\n });\n\n let frequency = Duration.isDuration(burstInterval)\n ? burstInterval\n : Duration.fromObject(burstInterval);\n if (frequency.as('milliseconds') < 5000) {\n frequency = Duration.fromObject({ seconds: 5 }); // don't let it be silly low, to not overload the scheduler\n }\n\n let length = Duration.isDuration(burstLength)\n ? burstLength\n : Duration.fromObject(burstLength);\n length = length.plus(Duration.fromObject({ minutes: 1 })); // some margin from the actual completion\n\n await scheduler.scheduleTask({\n id: provider.getProviderName(),\n fn: engine.taskFn.bind(engine),\n frequency,\n timeout: length,\n });\n },\n });\n\n return {\n onEvent: (params: EventParams) => engine.onEvent(params),\n supportsEventTopics() {\n return engine.supportsEventTopics();\n },\n };\n }\n}\n"],"names":["IncrementalIngestionDatabaseManager","createDeferred","applyDatabaseMigrations","IncrementalProviderRouter","IncrementalIngestionEngine","Duration"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/plugin-catalog-backend-module-incremental-ingestion",
|
|
3
|
-
"version": "0.6.1
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "An entity provider for streaming large asset sources into the catalog",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "backend-plugin-module",
|
|
@@ -61,17 +61,17 @@
|
|
|
61
61
|
"test": "backstage-cli package test"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@backstage/backend-
|
|
65
|
-
"@backstage/backend-plugin-api": "1.1.0
|
|
66
|
-
"@backstage/catalog-model": "1.7.
|
|
67
|
-
"@backstage/config": "1.3.
|
|
68
|
-
"@backstage/errors": "1.2.
|
|
69
|
-
"@backstage/plugin-catalog-backend": "1.29.0
|
|
70
|
-
"@backstage/plugin-catalog-node": "1.15.0
|
|
71
|
-
"@backstage/plugin-events-node": "0.4.6
|
|
72
|
-
"@backstage/plugin-permission-common": "0.8.
|
|
73
|
-
"@backstage/types": "1.2.0",
|
|
74
|
-
"@opentelemetry/api": "^1.
|
|
64
|
+
"@backstage/backend-defaults": "^0.6.0",
|
|
65
|
+
"@backstage/backend-plugin-api": "^1.1.0",
|
|
66
|
+
"@backstage/catalog-model": "^1.7.2",
|
|
67
|
+
"@backstage/config": "^1.3.1",
|
|
68
|
+
"@backstage/errors": "^1.2.6",
|
|
69
|
+
"@backstage/plugin-catalog-backend": "^1.29.0",
|
|
70
|
+
"@backstage/plugin-catalog-node": "^1.15.0",
|
|
71
|
+
"@backstage/plugin-events-node": "^0.4.6",
|
|
72
|
+
"@backstage/plugin-permission-common": "^0.8.3",
|
|
73
|
+
"@backstage/types": "^1.2.0",
|
|
74
|
+
"@opentelemetry/api": "^1.9.0",
|
|
75
75
|
"@types/express": "^4.17.6",
|
|
76
76
|
"express": "^4.17.1",
|
|
77
77
|
"express-promise-router": "^4.1.0",
|
|
@@ -80,9 +80,8 @@
|
|
|
80
80
|
"uuid": "^11.0.0"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
|
-
"@backstage/backend-
|
|
84
|
-
"@backstage/
|
|
85
|
-
"@backstage/cli": "0.29.3-next.1",
|
|
83
|
+
"@backstage/backend-test-utils": "^1.2.0",
|
|
84
|
+
"@backstage/cli": "^0.29.4",
|
|
86
85
|
"@types/luxon": "^3.0.0"
|
|
87
86
|
}
|
|
88
87
|
}
|