feat: update devtools almost real time using signals

Signed-off-by: Heikki Hellgren <heikki.hellgren@op.fi>
This commit is contained in:
Heikki Hellgren
2023-12-05 15:35:36 +02:00
parent db84649e81
commit 59a4508efe
28 changed files with 114 additions and 84 deletions
+3
View File
@@ -11,6 +11,7 @@ import express from 'express';
import { ExternalDependency } from '@backstage/plugin-devtools-common';
import { Logger } from 'winston';
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
import { SignalService } from '@backstage/plugin-signals-node';
// @public (undocumented)
export function createRouter(options: RouterOptions): Promise<express.Router>;
@@ -40,5 +41,7 @@ export interface RouterOptions {
logger: Logger;
// (undocumented)
permissions: PermissionEvaluator;
// (undocumented)
signalService?: SignalService;
}
```
+1
View File
@@ -38,6 +38,7 @@
"@backstage/plugin-devtools-common": "workspace:^",
"@backstage/plugin-permission-common": "workspace:^",
"@backstage/plugin-permission-node": "workspace:^",
"@backstage/plugin-signals-node": "workspace:^",
"@backstage/types": "workspace:^",
"@manypkg/get-packages": "^1.1.3",
"@types/express": "*",
+13 -1
View File
@@ -33,6 +33,7 @@ import { errorHandler } from '@backstage/backend-common';
import express from 'express';
import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node';
import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';
import { SignalService } from '@backstage/plugin-signals-node';
/** @public */
export interface RouterOptions {
@@ -40,17 +41,28 @@ export interface RouterOptions {
logger: Logger;
config: Config;
permissions: PermissionEvaluator;
signalService?: SignalService;
}
/** @public */
export async function createRouter(
options: RouterOptions,
): Promise<express.Router> {
const { logger, config, permissions } = options;
const { logger, config, permissions, signalService } = options;
const devToolsBackendApi =
options.devToolsBackendApi || new DevToolsBackendApi(logger, config);
if (signalService) {
// Publish info periodically using the signal service
setInterval(async () => {
if (signalService.hasSubscribers('devtools:info')) {
const info = await devToolsBackendApi.listInfo();
await signalService.publish('*', 'devtools:info', info);
}
}, 5000);
}
const router = Router();
router.use(express.json());
router.use(