moving creation logic to NBCreators

This commit is contained in:
Mark Wolters 2024-03-29 09:57:06 -04:00 committed by Jonathan Shook
parent 8abb35b818
commit 6e96c9c7aa
4 changed files with 47 additions and 47 deletions

View File

@ -436,12 +436,12 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
}
session.create().pushReporter(uri, intervalMs, NBLabels.forKV());
});
for (
final NBCLIOptions.LoggerConfigData histoLogger : options.getHistoLoggerConfigs())
session.addHistoLogger(sessionName, histoLogger.pattern, histoLogger.file, histoLogger.millis);
for (
final NBCLIOptions.LoggerConfigData statsLogger : options.getStatsLoggerConfigs())
session.addStatsLogger(sessionName, statsLogger.pattern, statsLogger.file, statsLogger.millis);
for (final NBCLIOptions.LoggerConfigData histoLogger : options.getHistoLoggerConfigs()) {
session.create().histoLogger(sessionName, histoLogger.pattern, histoLogger.file, histoLogger.millis);
}
for (final NBCLIOptions.LoggerConfigData statsLogger : options.getStatsLoggerConfigs()) {
session.create().histoStatsLogger(sessionName, statsLogger.pattern, statsLogger.file, statsLogger.millis);
}
ExecutionResult sessionResult = session.apply(options.getCommands());
logger.info(sessionResult);

View File

@ -48,7 +48,6 @@ import java.util.regex.Pattern;
*/
public class NBSession extends NBHeartbeatComponent implements Function<List<Cmd>, ExecutionResult>, NBTokenWords {
private final static Logger logger = LogManager.getLogger(NBSession.class);
private static final List<MetricsCloseable> metricsCloseables = new ArrayList<>();
// private final ClientSystemMetricChecker clientMetricChecker;
private final Map<String, NBBufferedContainer> containers = new ConcurrentHashMap<>();
@ -133,43 +132,5 @@ public class NBSession extends NBHeartbeatComponent implements Function<List<Cmd
);
}
public void addHistoLogger(String sessionName, String pattern, String filename, long millis) {
if (filename.contains("_SESSION_")) {
filename = filename.replace("_SESSION_", sessionName);
}
Pattern compiledPattern = Pattern.compile(pattern);
File logfile = new File(filename);
HistoIntervalLogger histoIntervalLogger =
new HistoIntervalLogger(this, sessionName, logfile, compiledPattern, millis);
logger.debug(() -> "Adding " + histoIntervalLogger + " to session " + sessionName);
metricsCloseables.add(histoIntervalLogger);
}
public void addStatsLogger(String sessionName, String pattern, String filename, long millis) {
if (filename.contains("_SESSION_")) {
filename = filename.replace("_SESSION_", sessionName);
}
Pattern compiledPattern = Pattern.compile(pattern);
File logfile = new File(filename);
HistoStatsLogger histoStatsLogger =
new HistoStatsLogger(this, sessionName, logfile, compiledPattern, millis, TimeUnit.NANOSECONDS);
logger.debug(() -> "Adding " + histoStatsLogger + " to session " + sessionName);
metricsCloseables.add(histoStatsLogger);
}
/**
* This should be called at the end of a process, so that open intervals can be finished, logs closed properly,
* etc.
*/
public static void closeMetrics() {
logger.trace("Closing all registered metrics closable objects.");
for (MetricsCloseable metricsCloseable : metricsCloseables) {
logger.trace(() -> "closing metrics closeable: " + metricsCloseable);
metricsCloseable.closeMetrics();
}
}
}

View File

@ -21,6 +21,8 @@ import io.nosqlbench.nb.api.components.events.ComponentOutOfScope;
import io.nosqlbench.nb.api.components.events.DownEvent;
import io.nosqlbench.nb.api.components.events.NBEvent;
import io.nosqlbench.nb.api.components.events.UpEvent;
import io.nosqlbench.nb.api.engine.metrics.HistoIntervalLogger;
import io.nosqlbench.nb.api.engine.metrics.MetricsCloseable;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
import io.nosqlbench.nb.api.labels.NBLabels;
import org.apache.logging.log4j.LogManager;
@ -40,6 +42,7 @@ public class NBBaseComponent extends NBBaseComponentMetrics implements NBCompone
protected Exception error;
protected long started_ns, teardown_ns, closed_ns, errored_ns, started_epoch_ms;
protected NBInvokableState state = NBInvokableState.STARTING;
private static final List<MetricsCloseable> metricsCloseables = new ArrayList<>();
public NBBaseComponent(NBComponent parentComponent) {
this(parentComponent, NBLabels.forKV());
@ -133,6 +136,9 @@ public class NBBaseComponent extends NBBaseComponentMetrics implements NBCompone
for (NBComponent child : children) {
child.close();
}
for (MetricsCloseable metricsCloseable : metricsCloseables) {
metricsCloseable.closeMetrics();
}
} catch (Exception e) {
onError(e);
} finally {
@ -302,4 +308,9 @@ public class NBBaseComponent extends NBBaseComponentMetrics implements NBCompone
public long started_epoch_ms() {
return this.started_epoch_ms;
}
public void addMetricsCloseable(MetricsCloseable metric) {
metricsCloseables.add(metric);
}
}

View File

@ -18,8 +18,7 @@ package io.nosqlbench.nb.api.components.core;
import io.nosqlbench.nb.api.csvoutput.CsvOutputPluginWriter;
import com.codahale.metrics.Meter;
import io.nosqlbench.nb.api.engine.metrics.DeltaHdrHistogramReservoir;
import io.nosqlbench.nb.api.engine.metrics.DoubleSummaryGauge;
import io.nosqlbench.nb.api.engine.metrics.*;
import io.nosqlbench.nb.api.engine.metrics.instruments.*;
import io.nosqlbench.nb.api.engine.metrics.reporters.*;
import io.nosqlbench.nb.api.histo.HdrHistoLog;
@ -37,11 +36,14 @@ import com.codahale.metrics.MetricAttribute;
import com.codahale.metrics.MetricFilter;
import org.apache.logging.log4j.Marker;
import java.io.File;
import java.io.PrintStream;
import java.util.*;
import java.nio.file.Path;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import java.util.regex.Pattern;
public class NBCreators {
@ -159,6 +161,32 @@ public class NBCreators {
return new NBShutdownHook(component);
}
public void histoLogger(String sessionName, String pattern, String filename, long millis) {
if (filename.contains("_SESSION_")) {
filename = filename.replace("_SESSION_", sessionName);
}
Pattern compiledPattern = Pattern.compile(pattern);
File logfile = new File(filename);
HistoIntervalLogger histoIntervalLogger =
new HistoIntervalLogger(base, sessionName, logfile, compiledPattern, millis);
logger.debug(() -> "Adding " + histoIntervalLogger + " to session " + sessionName);
base.addMetricsCloseable(histoIntervalLogger);
}
public void histoStatsLogger(String sessionName, String pattern, String filename, long millis) {
if (filename.contains("_SESSION_")) {
filename = filename.replace("_SESSION_", sessionName);
}
Pattern compiledPattern = Pattern.compile(pattern);
File logfile = new File(filename);
HistoStatsLogger histoStatsLogger =
new HistoStatsLogger(base, sessionName, logfile, compiledPattern, millis, TimeUnit.NANOSECONDS);
logger.debug(() -> "Adding " + histoStatsLogger + " to session " + sessionName);
base.addMetricsCloseable(histoStatsLogger);
}
public static class Log4jReporterBuilder {
private final NBComponent component;
private Logger logger = LogManager.getLogger(Log4JMetricsReporter.class);