Skip to content

Commit bea5bf5

Browse files
chore: store imported plugins, use log wrapper, update benchmark files (#277)
1 parent 2593331 commit bea5bf5

30 files changed

+2097
-5223
lines changed

common/lib/authentication/aws_secrets_manager_plugin_factory.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,15 @@ import { AwsWrapperError } from "../utils/errors";
2121
import { Messages } from "../utils/messages";
2222
import { logger } from "../../logutils";
2323

24-
export class AwsSecretsManagerPluginFactory implements ConnectionPluginFactory {
24+
export class AwsSecretsManagerPluginFactory extends ConnectionPluginFactory {
25+
private static awsSecretsManagerPlugin: any;
26+
2527
async getInstance(pluginService: PluginService, properties: Map<string, any>): Promise<ConnectionPlugin> {
2628
try {
27-
const awsSecretsManagerPlugin = await import("./aws_secrets_manager_plugin");
28-
return new awsSecretsManagerPlugin.AwsSecretsManagerPlugin(pluginService, new Map(properties));
29+
if (!AwsSecretsManagerPluginFactory.awsSecretsManagerPlugin) {
30+
AwsSecretsManagerPluginFactory.awsSecretsManagerPlugin = await import("./aws_secrets_manager_plugin");
31+
}
32+
return new AwsSecretsManagerPluginFactory.awsSecretsManagerPlugin.AwsSecretsManagerPlugin(pluginService, new Map(properties));
2933
} catch (error: any) {
3034
if (error.code === "MODULE_NOT_FOUND") {
3135
logger.error(error);

common/lib/authentication/iam_authentication_plugin_factory.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,15 @@ import { AwsWrapperError } from "../utils/errors";
2121
import { Messages } from "../utils/messages";
2222
import { logger } from "../../logutils";
2323

24-
export class IamAuthenticationPluginFactory implements ConnectionPluginFactory {
25-
async getInstance(pluginService: PluginService, properties: Map<string, any>): Promise<ConnectionPlugin> {
24+
export class IamAuthenticationPluginFactory extends ConnectionPluginFactory {
25+
private static iamAuthenticationPlugin: any;
26+
27+
async getInstance(pluginService: PluginService, properties: object): Promise<ConnectionPlugin> {
2628
try {
27-
const iamAuthenticationPlugin = await import("./iam_authentication_plugin");
28-
return new iamAuthenticationPlugin.IamAuthenticationPlugin(pluginService);
29+
if (!IamAuthenticationPluginFactory.iamAuthenticationPlugin) {
30+
IamAuthenticationPluginFactory.iamAuthenticationPlugin = await import("./iam_authentication_plugin");
31+
}
32+
return new IamAuthenticationPluginFactory.iamAuthenticationPlugin.IamAuthenticationPlugin(pluginService);
2933
} catch (error: any) {
3034
logger.error(error);
3135
throw new AwsWrapperError(Messages.get("ConnectionPluginChainBuilder.errorImportingPlugin", "IamAuthenticationPlugin"));

common/lib/connection_plugin_chain_builder.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,18 @@ import { AuroraInitialConnectionStrategyFactory } from "./plugins/aurora_initial
3535
import { AuroraConnectionTrackerPluginFactory } from "./plugins/connection_tracker/aurora_connection_tracker_plugin_factory";
3636
import { ConnectionProviderManager } from "./connection_provider_manager";
3737
import { DeveloperConnectionPluginFactory } from "./plugins/dev/developer_connection_plugin_factory";
38+
import { ConnectionPluginFactory } from "./plugin_factory";
3839

3940
/*
4041
Type alias used for plugin factory sorting. It holds a reference to a plugin
4142
factory and an assigned weight.
4243
*/
4344
type PluginFactoryInfo = {
44-
factory: FactoryClass;
45+
factory: typeof ConnectionPluginFactory;
4546
weight: number;
4647
};
4748

48-
export type FactoryClass = typeof IamAuthenticationPluginFactory | typeof FailoverPluginFactory;
49-
5049
export class ConnectionPluginChainBuilder {
51-
static readonly DEFAULT_PLUGINS = "failover,efm";
5250
static readonly WEIGHT_RELATIVE_TO_PRIOR_PLUGIN = -1;
5351

5452
static readonly PLUGIN_FACTORIES = new Map<string, PluginFactoryInfo>([
@@ -75,10 +73,10 @@ export class ConnectionPluginChainBuilder {
7573
const plugins: ConnectionPlugin[] = [];
7674
let pluginCodes: string = props.get(WrapperProperties.PLUGINS.name);
7775
if (pluginCodes == null) {
78-
pluginCodes = ConnectionPluginChainBuilder.DEFAULT_PLUGINS;
76+
pluginCodes = WrapperProperties.DEFAULT_PLUGINS;
7977
}
8078

81-
const usingDefault = pluginCodes === ConnectionPluginChainBuilder.DEFAULT_PLUGINS;
79+
const usingDefault = pluginCodes === WrapperProperties.DEFAULT_PLUGINS;
8280

8381
pluginCodes = pluginCodes.trim();
8482

common/lib/plugin_factory.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import { PluginService } from "./plugin_service";
1818
import { ConnectionPlugin } from "./connection_plugin";
1919

20-
export interface ConnectionPluginFactory {
21-
getInstance(pluginService: PluginService, properties: Map<string, any>): Promise<ConnectionPlugin>;
20+
export class ConnectionPluginFactory {
21+
getInstance(pluginService: PluginService, properties: Map<string, any>): Promise<ConnectionPlugin> {
22+
return;
23+
}
2224
}

common/lib/plugin_manager.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import { ConnectionPlugin } from "./connection_plugin";
1818
import { HostInfo } from "./host_info";
19-
import { ConnectionPluginChainBuilder, FactoryClass } from "./connection_plugin_chain_builder";
19+
import { ConnectionPluginChainBuilder } from "./connection_plugin_chain_builder";
2020
import { AwsWrapperError } from "./utils/errors";
2121
import { Messages } from "./utils/messages";
2222
import { PluginServiceManagerContainer } from "./plugin_service_manager_container";
@@ -30,6 +30,7 @@ import { ConnectionProviderManager } from "./connection_provider_manager";
3030
import { TelemetryFactory } from "./utils/telemetry/telemetry_factory";
3131
import { TelemetryTraceLevel } from "./utils/telemetry/telemetry_trace_level";
3232
import { ConnectionProvider } from "./connection_provider";
33+
import { ConnectionPluginFactory } from "./plugin_factory";
3334

3435
type PluginFunc<T> = (plugin: ConnectionPlugin, targetFunc: () => Promise<T>) => Promise<T>;
3536

@@ -327,7 +328,7 @@ export class PluginManager {
327328
throw new AwsWrapperError(Messages.get("PluginManager.unableToRetrievePlugin"));
328329
}
329330

330-
static registerPlugin(pluginCode: string, pluginFactory: FactoryClass) {
331+
static registerPlugin(pluginCode: string, pluginFactory: typeof ConnectionPluginFactory) {
331332
ConnectionPluginChainBuilder.PLUGIN_FACTORIES.set(pluginCode, {
332333
factory: pluginFactory,
333334
weight: ConnectionPluginChainBuilder.WEIGHT_RELATIVE_TO_PRIOR_PLUGIN

common/lib/plugins/aurora_initial_connection_strategy_plugin_factory.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,16 @@ import { ConnectionPluginFactory } from "../plugin_factory";
1818
import { PluginService } from "../plugin_service";
1919
import { AwsWrapperError } from "../utils/errors";
2020
import { Messages } from "../utils/messages";
21-
import { ConnectionPlugin } from "../connection_plugin";
2221

23-
export class AuroraInitialConnectionStrategyFactory implements ConnectionPluginFactory {
24-
async getInstance(pluginService: PluginService, props: Map<string, any>): Promise<ConnectionPlugin> {
22+
export class AuroraInitialConnectionStrategyFactory extends ConnectionPluginFactory {
23+
private static auroraInitialConnectionStrategyPlugin: any;
24+
25+
async getInstance(pluginService: PluginService, props: Map<string, any>) {
2526
try {
26-
const auroraInitialConnectionStrategyPlugin = await import("./aurora_initial_connection_strategy_plugin");
27-
return new auroraInitialConnectionStrategyPlugin.AuroraInitialConnectionStrategyPlugin(pluginService);
27+
if (!AuroraInitialConnectionStrategyFactory.auroraInitialConnectionStrategyPlugin) {
28+
AuroraInitialConnectionStrategyFactory.auroraInitialConnectionStrategyPlugin = await import("./aurora_initial_connection_strategy_plugin");
29+
}
30+
return new AuroraInitialConnectionStrategyFactory.auroraInitialConnectionStrategyPlugin.AuroraInitialConnectionStrategyPlugin(pluginService);
2831
} catch (error: any) {
2932
throw new AwsWrapperError(Messages.get("ConnectionPluginChainBuilder.errorImportingPlugin", "AuroraInitialConnectionStrategyPlugin"));
3033
}

common/lib/plugins/connect_time_plugin_factory.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,15 @@ import { AwsWrapperError } from "../utils/errors";
2121
import { Messages } from "../utils/messages";
2222
import { logger } from "../../logutils";
2323

24-
export class ConnectTimePluginFactory implements ConnectionPluginFactory {
24+
export class ConnectTimePluginFactory extends ConnectionPluginFactory {
25+
private static connectTimePlugin: any;
26+
2527
async getInstance(pluginService: PluginService, properties: Map<string, any>): Promise<ConnectionPlugin> {
2628
try {
27-
const connectTimePlugin = await import("./connect_time_plugin");
28-
return new connectTimePlugin.ConnectTimePlugin();
29+
if (!ConnectTimePluginFactory.connectTimePlugin) {
30+
ConnectTimePluginFactory.connectTimePlugin = await import("./connect_time_plugin");
31+
}
32+
return new ConnectTimePluginFactory.connectTimePlugin.ConnectTimePlugin();
2933
} catch (error: any) {
3034
logger.error(error.message);
3135
throw new AwsWrapperError(Messages.get("ConnectionPluginChainBuilder.errorImportingPlugin", "ConnectTimePlugin"));

common/lib/plugins/connection_tracker/aurora_connection_tracker_plugin_factory.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,15 @@ import { logger } from "../../../logutils";
2121
import { AwsWrapperError } from "../../utils/errors";
2222
import { Messages } from "../../utils/messages";
2323

24-
export class AuroraConnectionTrackerPluginFactory implements ConnectionPluginFactory {
24+
export class AuroraConnectionTrackerPluginFactory extends ConnectionPluginFactory {
25+
private static auroraConnectionTrackerPlugin: any;
26+
2527
async getInstance(pluginService: PluginService, props: Map<string, any>): Promise<ConnectionPlugin> {
2628
try {
27-
const auroraConnectionTrackerPlugin = await import("./aurora_connection_tracker_plugin");
28-
return new auroraConnectionTrackerPlugin.AuroraConnectionTrackerPlugin(pluginService);
29+
if (!AuroraConnectionTrackerPluginFactory.auroraConnectionTrackerPlugin) {
30+
AuroraConnectionTrackerPluginFactory.auroraConnectionTrackerPlugin = await import("./aurora_connection_tracker_plugin");
31+
}
32+
return new AuroraConnectionTrackerPluginFactory.auroraConnectionTrackerPlugin.AuroraConnectionTrackerPlugin(pluginService);
2933
} catch (error: any) {
3034
logger.error(error.message);
3135
throw new AwsWrapperError(Messages.get("ConnectionPluginChainBuilder.errorImportingPlugin", "AuroraConnectionTrackerPlugin"));

common/lib/plugins/dev/developer_connection_plugin_factory.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,15 @@ import { Messages } from "../../utils/messages";
2222
import { AwsWrapperError } from "../../utils/errors";
2323
import { logger } from "../../../logutils";
2424

25-
export class DeveloperConnectionPluginFactory implements ConnectionPluginFactory {
25+
export class DeveloperConnectionPluginFactory extends ConnectionPluginFactory {
26+
private static developerPlugin: any;
27+
2628
async getInstance(pluginService: PluginService, properties: Map<string, any>): Promise<ConnectionPlugin> {
2729
try {
28-
const developerPlugin = await import("./developer_connection_plugin");
29-
return new developerPlugin.DeveloperConnectionPlugin(pluginService, properties, new RdsUtils());
30+
if (!DeveloperConnectionPluginFactory.developerPlugin) {
31+
DeveloperConnectionPluginFactory.developerPlugin = await import("./developer_connection_plugin");
32+
}
33+
return new DeveloperConnectionPluginFactory.developerPlugin.DeveloperConnectionPlugin(pluginService, properties, new RdsUtils());
3034
} catch (error: any) {
3135
logger.error(error);
3236
throw new AwsWrapperError(Messages.get("ConnectionPluginChainBuilder.errorImportingPlugin", "DeveloperConnectionPlugin"));

common/lib/plugins/efm/host_monitoring_plugin_factory.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,15 @@ import { logger } from "../../../logutils";
2222
import { AwsWrapperError } from "../../utils/errors";
2323
import { Messages } from "../../utils/messages";
2424

25-
export class HostMonitoringPluginFactory implements ConnectionPluginFactory {
25+
export class HostMonitoringPluginFactory extends ConnectionPluginFactory {
26+
private static hostMonitoringPlugin: any;
27+
2628
async getInstance(pluginService: PluginService, properties: Map<string, any>): Promise<ConnectionPlugin> {
2729
try {
28-
const hostMonitoringPlugin = await import("./host_monitoring_connection_plugin");
29-
return new hostMonitoringPlugin.HostMonitoringConnectionPlugin(pluginService, properties, new RdsUtils());
30+
if (!HostMonitoringPluginFactory.hostMonitoringPlugin) {
31+
HostMonitoringPluginFactory.hostMonitoringPlugin = await import("./host_monitoring_connection_plugin");
32+
}
33+
return new HostMonitoringPluginFactory.hostMonitoringPlugin.HostMonitoringConnectionPlugin(pluginService, properties, new RdsUtils());
3034
} catch (error: any) {
3135
logger.error(error.message);
3236
throw new AwsWrapperError(Messages.get("ConnectionPluginChainBuilder.errorImportingPlugin", "HostMonitoringPlugin"));

0 commit comments

Comments
 (0)