From f492979384110fbf95458f980ef71838b8090417 Mon Sep 17 00:00:00 2001 From: Mark Wolters Date: Sat, 7 Oct 2023 15:59:29 -0400 Subject: [PATCH] added ConsoleReporter --- .../lifecycle/ExecutionMetricsResult.java | 39 ++++++++----------- .../scenario/execution/ScenarioSummary.java | 7 +++- .../metrics/reporters/ConsoleReporter.java | 25 ++++++++++++ 3 files changed, 46 insertions(+), 25 deletions(-) diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionMetricsResult.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionMetricsResult.java index 677d0dac01..f213317146 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionMetricsResult.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/ExecutionMetricsResult.java @@ -16,18 +16,16 @@ package io.nosqlbench.engine.core.lifecycle; -import com.codahale.metrics.*; -import com.codahale.metrics.ConsoleReporter.Builder; -import io.nosqlbench.api.engine.metrics.reporters.Log4JMetricsReporter; -import io.nosqlbench.api.engine.metrics.reporters.Log4JMetricsReporter.LoggingLevel; -import io.nosqlbench.engine.core.metrics.NBMetricsSummary; +import com.codahale.metrics.MetricAttribute; +import io.nosqlbench.api.engine.metrics.reporters.ConsoleReporter; +import io.nosqlbench.components.NBBuilders; +import io.nosqlbench.components.NBComponent; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.nio.charset.StandardCharsets; import java.util.HashSet; import java.util.Set; -import java.util.concurrent.TimeUnit; public class ExecutionMetricsResult extends ExecutionResult { @@ -53,34 +51,29 @@ public ExecutionMetricsResult(final long startedAt, final long endedAt, final St super(startedAt, endedAt, iolog, error); } - public String getMetricsSummary() { + public String getMetricsSummary(NBComponent component) { final ByteArrayOutputStream os = new ByteArrayOutputStream(); try (final PrintStream ps = new PrintStream(os)) { - // TODO: metrics -// final Builder builder = ConsoleReporter.forRegistry(ActivityMetrics.getMetricRegistry()) -// .convertDurationsTo(TimeUnit.MICROSECONDS) -// .convertRatesTo(TimeUnit.SECONDS) -// .filter(MetricFilter.ALL) -// .outputTo(ps); -// final Set disabled = new HashSet<>(ExecutionMetricsResult.INTERVAL_ONLY_METRICS); -// if (60000 > this.getElapsedMillis()) disabled.addAll(ExecutionMetricsResult.OVER_ONE_MINUTE_METRICS); -// builder.disabledMetricAttributes(disabled); -// final ConsoleReporter consoleReporter = builder.build(); -// consoleReporter.report(); -// consoleReporter.close(); + final NBBuilders.ConsoleReporterBuilder builder = new NBBuilders.ConsoleReporterBuilder(component, ps); + final Set disabled = new HashSet<>(ExecutionMetricsResult.INTERVAL_ONLY_METRICS); + if (60000 > this.getElapsedMillis()) disabled.addAll(ExecutionMetricsResult.OVER_ONE_MINUTE_METRICS); + builder.disabledMetricAttributes(disabled); + final ConsoleReporter consoleReporter = builder.build(); + consoleReporter.report(); + consoleReporter.close(); } final String result = os.toString(StandardCharsets.UTF_8); return result; } - public void reportToConsole() { - final String summaryReport = this.getMetricsSummary(); + public void reportToConsole(NBComponent component) { + final String summaryReport = this.getMetricsSummary(component); System.out.println(summaryReport); } - public void reportMetricsSummaryTo(final PrintStream out) { - out.println(this.getMetricsSummary()); + public void reportMetricsSummaryTo(NBComponent component, final PrintStream out) { + out.println(this.getMetricsSummary(component)); } public void reportMetricsSummaryToLog() { diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/ScenarioSummary.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/ScenarioSummary.java index 87e395e3fe..1443c0a65e 100644 --- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/ScenarioSummary.java +++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/execution/ScenarioSummary.java @@ -16,6 +16,7 @@ package io.nosqlbench.engine.core.lifecycle.scenario.execution; +import io.nosqlbench.components.NBComponent; import io.nosqlbench.engine.core.lifecycle.ExecutionMetricsResult; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -29,7 +30,7 @@ public class ScenarioSummary { private final static Logger logger = LogManager.getLogger(ScenarioSummary.class); - private static void doReportSummaries(final String reportSummaryTo, final ExecutionMetricsResult result, Map subs) { + private static void doReportSummaries(NBComponent scenario, final String reportSummaryTo, final ExecutionMetricsResult result, Map subs) { final List fullChannels = new ArrayList<>(); final List briefChannels = new ArrayList<>(); final String[] destinationSpecs = reportSummaryTo.split(", *"); @@ -69,7 +70,9 @@ private static void doReportSummaries(final String reportSummaryTo, final Execut briefChannels.add(out); } } - fullChannels.forEach(result::reportMetricsSummaryTo); + for (PrintStream fullChannel : fullChannels) { + result.reportMetricsSummaryTo(scenario, fullChannel); + } // briefChannels.forEach(result::reportCountsTo); } diff --git a/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/reporters/ConsoleReporter.java b/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/reporters/ConsoleReporter.java index dab1ae330f..ca59900d31 100644 --- a/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/reporters/ConsoleReporter.java +++ b/nb-api/src/main/java/io/nosqlbench/api/engine/metrics/reporters/ConsoleReporter.java @@ -19,6 +19,7 @@ import com.codahale.metrics.*; import com.codahale.metrics.Timer; +import io.nosqlbench.api.engine.metrics.instruments.NBMetric; import io.nosqlbench.api.labels.NBLabels; import io.nosqlbench.components.NBComponent; import io.nosqlbench.components.PeriodicTaskComponent; @@ -56,7 +57,31 @@ public ConsoleReporter(NBComponent node, NBLabels extraLabels, int seconds, bool @Override protected void task() { + report(); + } + public void report() { + SortedMap gauges = new TreeMap<>(); + SortedMap counters = new TreeMap<>(); + SortedMap histograms = new TreeMap<>(); + SortedMap meters = new TreeMap<>(); + SortedMap timers = new TreeMap<>(); + List metrics = getParent().findMetricsInTree(""); + final long timestamp = TimeUnit.MILLISECONDS.toSeconds(clock.getTime()); + for (NBMetric metric : metrics) { + if (metric instanceof Gauge) { + gauges.put(metric.getLabels().linearizeAsMetrics(), (Gauge) metric); + } else if (metric instanceof Counter) { + counters.put(metric.getLabels().linearizeAsMetrics(), (Counter) metric); + } else if (metric instanceof Histogram) { + histograms.put(metric.getLabels().linearizeAsMetrics(), (Histogram) metric); + } else if (metric instanceof Meter) { + meters.put(metric.getLabels().linearizeAsMetrics(), (Meter) metric); + } else if (metric instanceof Timer) { + timers.put(metric.getLabels().linearizeAsMetrics(), (Timer) metric); + } + } + report(gauges, counters, histograms, meters, timers); } public void report(SortedMap gauges,