Merge pull request #13354 from backstage/freben/keepalive

added keepalive to DatabaseManager
This commit is contained in:
Fredrik Adelöw
2022-08-30 13:00:56 +02:00
committed by GitHub
7 changed files with 62 additions and 3 deletions
+1
View File
@@ -252,6 +252,7 @@ export class DatabaseManager {
// @public
export type DatabaseManagerOptions = {
migrations?: PluginDatabaseManager['migrations'];
logger?: Logger;
};
// @public
@@ -29,6 +29,8 @@ import {
} from './connection';
import { PluginDatabaseManager } from './types';
import path from 'path';
import { Logger } from 'winston';
import { stringifyError } from '@backstage/errors';
/**
* Provides a config lookup path for a plugin's config block.
@@ -44,6 +46,7 @@ function pluginPath(pluginId: string): string {
*/
export type DatabaseManagerOptions = {
migrations?: PluginDatabaseManager['migrations'];
logger?: Logger;
};
/**
@@ -339,6 +342,31 @@ export class DatabaseManager {
schemaOverrides,
);
return createDatabaseClient(pluginConfig, databaseClientOverrides);
const client = createDatabaseClient(pluginConfig, databaseClientOverrides);
this.startKeepaliveLoop(pluginId, client);
return client;
}
private startKeepaliveLoop(pluginId: string, client: Knex): void {
let lastKeepaliveFailed = false;
setInterval(() => {
client.raw('select 1').then(
() => {
lastKeepaliveFailed = false;
},
(error: unknown) => {
if (!lastKeepaliveFailed) {
lastKeepaliveFailed = true;
this.options?.logger?.warn(
`Database keepalive failed for plugin ${pluginId}, ${stringifyError(
error,
)}`,
);
}
},
);
}, 60 * 1000);
}
}
+1 -1
View File
@@ -69,7 +69,7 @@ function makeCreateEnv(config: Config) {
discovery,
tokenManager,
});
const databaseManager = DatabaseManager.fromConfig(config);
const databaseManager = DatabaseManager.fromConfig(config, { logger: root });
const cacheManager = CacheManager.fromConfig(config);
const taskScheduler = TaskScheduler.fromConfig(config);
@@ -36,7 +36,7 @@ function makeCreateEnv(config: Config) {
const reader = UrlReaders.default({ logger: root, config });
const discovery = SingleHostDiscovery.fromConfig(config);
const cacheManager = CacheManager.fromConfig(config);
const databaseManager = DatabaseManager.fromConfig(config);
const databaseManager = DatabaseManager.fromConfig(config, { logger: root });
const tokenManager = ServerTokenManager.noop();
const taskScheduler = TaskScheduler.fromConfig(config);
const permissions = ServerPermissionClient.fromConfig(config, {