made listeners static

This commit is contained in:
Mark Wolters
2024-03-29 13:02:56 -04:00
committed by Jonathan Shook
parent 6e96c9c7aa
commit bf34f58af3
2 changed files with 49 additions and 0 deletions

View File

@@ -16,18 +16,22 @@
package io.nosqlbench.nb.api.components.core;
import com.codahale.metrics.*;
import com.codahale.metrics.Timer;
import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory;
import io.nosqlbench.nb.api.tagging.TagFilter;
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetric;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class NBBaseComponentMetrics implements NBComponentMetrics {
private final Lock lock = new ReentrantLock(false);
private final Map<String, NBMetric> metrics = new ConcurrentHashMap<>();
private final static List<MetricRegistryListener> listeners = new CopyOnWriteArrayList<>();
@Override
public String addComponentMetric(NBMetric metric, MetricCategory category, String requiredDescription) {
try {
@@ -37,11 +41,54 @@ public class NBBaseComponentMetrics implements NBComponentMetrics {
throw new RuntimeException("Can't add the same metric by label set to the same live component:" + openMetricsName);
}
metrics.put(openMetricsName,metric);
for (MetricRegistryListener listener : listeners) {
notifyListenerOfAddedMetric(listener, metric, openMetricsName);
}
return metric.getLabels().linearizeAsMetrics();
} finally {
lock.unlock();
}
}
public void addListener(MetricRegistryListener listener) {
listeners.add(listener);
for (Map.Entry<String, NBMetric> entry : metrics.entrySet()) {
notifyListenerOfAddedMetric(listener, entry.getValue(), entry.getKey());
}
}
public void removeListener(MetricRegistryListener listener) {
listeners.remove(listener);
}
private void notifyListenerOfAddedMetric(MetricRegistryListener listener, NBMetric metric, String name) {
switch (metric) {
case Gauge gauge -> listener.onGaugeAdded(name, gauge);
case Counter counter -> listener.onCounterAdded(name, counter);
case Histogram histogram -> listener.onHistogramAdded(name, histogram);
case Meter meter -> listener.onMeterAdded(name, meter);
case Timer timer -> listener.onTimerAdded(name, timer);
case null, default -> throw new IllegalArgumentException("Unknown metric type: " + metric.getClass());
}
}
private void onMetricRemoved(String name, NBMetric metric) {
for (MetricRegistryListener listener : listeners) {
notifyListenerOfRemovedMetric(name, metric, listener);
}
}
private void notifyListenerOfRemovedMetric(String name, NBMetric metric, MetricRegistryListener listener) {
switch (metric) {
case Gauge gauge -> listener.onGaugeRemoved(name);
case Counter counter -> listener.onCounterRemoved(name);
case Histogram histogram -> listener.onHistogramRemoved(name);
case Meter meter -> listener.onMeterRemoved(name);
case Timer timer -> listener.onTimerRemoved(name);
case null, default -> throw new IllegalArgumentException("Unknown metric type: " + metric.getClass());
}
}
@Override
public NBMetric getComponentMetric(String name) {
return metrics.get(name);

View File

@@ -172,6 +172,7 @@ public class NBCreators {
new HistoIntervalLogger(base, sessionName, logfile, compiledPattern, millis);
logger.debug(() -> "Adding " + histoIntervalLogger + " to session " + sessionName);
base.addMetricsCloseable(histoIntervalLogger);
base.addListener(histoIntervalLogger);
}
public void histoStatsLogger(String sessionName, String pattern, String filename, long millis) {
@@ -185,6 +186,7 @@ public class NBCreators {
new HistoStatsLogger(base, sessionName, logfile, compiledPattern, millis, TimeUnit.NANOSECONDS);
logger.debug(() -> "Adding " + histoStatsLogger + " to session " + sessionName);
base.addMetricsCloseable(histoStatsLogger);
base.addListener(histoStatsLogger);
}
public static class Log4jReporterBuilder {