Skip to content

Commit

Permalink
ensure lazy initialzation (#64)
Browse files Browse the repository at this point in the history
* ensure lazy initialzation

* apply spotless
  • Loading branch information
kortemik authored Jan 23, 2025
1 parent daca951 commit 80210c3
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 62 deletions.
129 changes: 68 additions & 61 deletions src/main/java/com/teragrep/aer_02/InitializationOnDemandHolder.java
Original file line number Diff line number Diff line change
Expand Up @@ -72,75 +72,82 @@ private InitializationOnDemandHolder() {

}

private static final LazyInstance INSTANCE = new LazyInstance();

public static LazyInstance lazyInstance() {
return INSTANCE;
static LazyHolder.LazyInstance lazyInstance() {
return LazyHolder.INSTANCE;
}

static final class LazyInstance {

private final DefaultOutput defaultOutput;
private final MetricRegistry metricRegistry;
private final Report report;

private LazyInstance() {
final Logger logger = Logger.getAnonymousLogger();
metricRegistry = new MetricRegistry();
Sourceable environmentSource = new EnvironmentSource();
RelpConnectionConfig relpConnectionConfig = new RelpConnectionConfig(environmentSource);
report = new JmxReport(
new Slf4jReport(new PrometheusReport(new DropwizardExports(metricRegistry)), metricRegistry),
metricRegistry
);

report.start();

Pool<IManagedRelpConnection> relpConnectionPool;
if (environmentSource.source("relp.tls.mode", "none").equals("keyVault")) {
logger.info("Using keyVault TLS mode");
relpConnectionPool = new UnboundPool<>(
new ManagedRelpConnectionWithMetricsFactory(
logger,
relpConnectionConfig.asRelpConfig(),
"defaultOutput",
metricRegistry,
relpConnectionConfig.asSocketConfig(),
new AzureSSLContextSupplier()
),
new ManagedRelpConnectionStub()
);
}
else {
logger.info("Using plain mode");
relpConnectionPool = new UnboundPool<>(
new ManagedRelpConnectionWithMetricsFactory(
logger,
relpConnectionConfig.asRelpConfig(),
"defaultOutput",
metricRegistry,
relpConnectionConfig.asSocketConfig()
),
new ManagedRelpConnectionStub()
);
}
static final class LazyHolder {

defaultOutput = new DefaultOutput(logger, relpConnectionPool);
private LazyHolder() {

Runtime.getRuntime().addShutdownHook(new Thread(this::close));
}

public DefaultOutput defaultOutput() {
return defaultOutput;
}
private static final LazyInstance INSTANCE = new LazyInstance();

public MetricRegistry metricRegistry() {
return metricRegistry;
}
static final class LazyInstance {

private void close() {
report.close();
defaultOutput.close();
private final DefaultOutput defaultOutput;
private final MetricRegistry metricRegistry;
private final Report report;

private LazyInstance() {
final Logger logger = Logger.getAnonymousLogger();
metricRegistry = new MetricRegistry();
Sourceable environmentSource = new EnvironmentSource();
RelpConnectionConfig relpConnectionConfig = new RelpConnectionConfig(environmentSource);
report = new JmxReport(
new Slf4jReport(new PrometheusReport(new DropwizardExports(metricRegistry)), metricRegistry),
metricRegistry
);

report.start();

Pool<IManagedRelpConnection> relpConnectionPool;
if (environmentSource.source("relp.tls.mode", "none").equals("keyVault")) {
logger.info("Using keyVault TLS mode");
relpConnectionPool = new UnboundPool<>(
new ManagedRelpConnectionWithMetricsFactory(
logger,
relpConnectionConfig.asRelpConfig(),
"defaultOutput",
metricRegistry,
relpConnectionConfig.asSocketConfig(),
new AzureSSLContextSupplier()
),
new ManagedRelpConnectionStub()
);
}
else {
logger.info("Using plain mode");
relpConnectionPool = new UnboundPool<>(
new ManagedRelpConnectionWithMetricsFactory(
logger,
relpConnectionConfig.asRelpConfig(),
"defaultOutput",
metricRegistry,
relpConnectionConfig.asSocketConfig()
),
new ManagedRelpConnectionStub()
);
}

defaultOutput = new DefaultOutput(logger, relpConnectionPool);

Runtime.getRuntime().addShutdownHook(new Thread(this::close));
}

public DefaultOutput defaultOutput() {
return defaultOutput;
}

public MetricRegistry metricRegistry() {
return metricRegistry;
}

private void close() {
report.close();
defaultOutput.close();
}
}
}
}
3 changes: 2 additions & 1 deletion src/main/java/com/teragrep/aer_02/SyslogBridge.java
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,8 @@ public void eventHubTriggerToSyslog(

context.getLogger().info("initializing at " + this);

final InitializationOnDemandHolder.LazyInstance lazyInstance = InitializationOnDemandHolder.lazyInstance();
final InitializationOnDemandHolder.LazyHolder.LazyInstance lazyInstance = InitializationOnDemandHolder
.lazyInstance();
final DefaultOutput defaultOutput = lazyInstance.defaultOutput();
context.getLogger().info("initialized at " + this);

Expand Down

0 comments on commit 80210c3

Please sign in to comment.