add modular metering API and refactor progress meter

This commit is contained in:
Jonathan Shook
2022-05-31 21:01:00 -05:00
parent 6d1bfd10b6
commit 7b1b41ec85
20 changed files with 463 additions and 78 deletions

View File

@@ -16,14 +16,15 @@
package io.nosqlbench.engine.core.lifecycle;
import io.nosqlbench.engine.api.activityapi.core.*;
import io.nosqlbench.engine.api.activityapi.core.progress.ProgressCapable;
import io.nosqlbench.engine.api.activityapi.core.progress.ProgressMeter;
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
import io.nosqlbench.engine.api.activityimpl.ParameterMap;
import io.nosqlbench.engine.api.activityimpl.input.ProgressCapable;
import io.nosqlbench.engine.core.annotation.Annotators;
import io.nosqlbench.nb.api.annotations.Layer;
import io.nosqlbench.nb.api.annotations.Annotation;
import org.apache.logging.log4j.Logger;
import io.nosqlbench.nb.api.annotations.Layer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.*;
import java.util.concurrent.ExecutorService;

View File

@@ -17,12 +17,13 @@
package io.nosqlbench.engine.core.lifecycle;
import io.nosqlbench.engine.api.activityapi.core.RunState;
import io.nosqlbench.engine.api.activityimpl.ProgressAndStateMeter;
import io.nosqlbench.engine.api.activityapi.core.progress.ProgressMeter;
import io.nosqlbench.engine.api.activityapi.core.progress.StateCapable;
import io.nosqlbench.engine.api.metrics.IndicatorMode;
import io.nosqlbench.engine.api.metrics.PeriodicRunnable;
import io.nosqlbench.engine.api.util.Unit;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Collection;
import java.util.HashSet;
@@ -57,15 +58,15 @@ public class ActivityProgressIndicator implements Runnable {
switch (parts.length) {
case 2:
intervalMillis = Unit.msFor(parts[1]).orElseThrow(
() -> new RuntimeException("Unable to parse progress indicator indicatorSpec '" + parts[1] +"'")
() -> new RuntimeException("Unable to parse progress indicator indicatorSpec '" + parts[1] + "'")
);
case 1:
try {
indicatorMode = IndicatorMode.valueOf(parts[0]);
indicatorMode = IndicatorMode.valueOf(parts[0]);
} catch (IllegalArgumentException ie) {
throw new RuntimeException(
"No such IndicatorMode exists for --progress: choose one of console or logonly." +
" If you need to specify an interval such as 10m, then you must use --progress logonly:10m or --progress console:10m");
"No such IndicatorMode exists for --progress: choose one of console or logonly." +
" If you need to specify an interval such as 10m, then you must use --progress logonly:10m or --progress console:10m");
}
break;
default:
@@ -75,11 +76,12 @@ public class ActivityProgressIndicator implements Runnable {
@Override
public void run() {
Collection<ProgressAndStateMeter> progressMeters = sc.getProgressMeters();
for (ProgressAndStateMeter meter : progressMeters) {
Collection<ProgressMeter> progressMeters = sc.getProgressMeters();
for (ProgressMeter meter : progressMeters) {
boolean lastReport = false;
if (meter.getProgressRatio() >= 1.0d || meter.getRunState() == RunState.Finished) {
if (meter.getRatioComplete() >= 1.0d ||
(meter instanceof StateCapable sc && sc.getRunState() == RunState.Finished)) {
if (seen.contains(meter.getProgressName())) {
continue;
} else {
@@ -89,8 +91,7 @@ public class ActivityProgressIndicator implements Runnable {
}
String progress =
meter.getProgressName() + ": " + formatProgress(meter.getProgressRatio()) + "/" + meter.getRunState() +
" (details: " + meter.getProgressSummary() + ")" + (lastReport ? " (last report)" : "");
meter.getSummary() + (lastReport ? " (last report)" : "");
switch (indicatorMode) {
case console:

View File

@@ -18,9 +18,9 @@ package io.nosqlbench.engine.core.lifecycle;
import io.nosqlbench.engine.api.activityapi.core.Activity;
import io.nosqlbench.engine.api.activityapi.core.ActivityType;
import io.nosqlbench.engine.api.activityapi.core.RunState;
import io.nosqlbench.engine.api.activityapi.core.progress.ProgressMeter;
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
import io.nosqlbench.engine.api.activityimpl.ParameterMap;
import io.nosqlbench.engine.api.activityimpl.ProgressAndStateMeter;
import io.nosqlbench.engine.api.metrics.ActivityMetrics;
import io.nosqlbench.engine.core.annotation.Annotators;
import io.nosqlbench.nb.annotations.Maturity;
@@ -504,12 +504,12 @@ public class ScenarioController {
return activityMap;
}
public List<ProgressAndStateMeter> getProgressMeters() {
List<ProgressAndStateMeter> indicators = new ArrayList<>();
public List<ProgressMeter> getProgressMeters() {
List<ProgressMeter> indicators = new ArrayList<>();
for (ActivityExecutor ae : activityExecutors.values()) {
indicators.add(new ProgressAndStateMeter(ae.getProgressMeter(), ae.getActivity()));
indicators.add(ae.getProgressMeter());
}
indicators.sort((o1, o2) -> Long.compare(o1.getStartedAtMillis(), o2.getStartedAtMillis()));
indicators.sort(Comparator.comparing(ProgressMeter::getStartTime));
return indicators;
}