From 56c687380ece288ab09877db16b419cd74f2a1d5 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 8 Sep 2023 20:07:47 -0500 Subject: [PATCH] provide cycle value metric --- .../inputs/cyclelog/CycleLogInput.java | 11 ++++- .../api/activityimpl/input/AtomicInput.java | 49 ++++++++++++++----- .../input/TargetRateInputType.java | 2 +- .../activityimpl/input/AtomicInputTest.java | 3 +- .../engine/core/ActivityExecutorTest.java | 5 +- .../nosqlbench/engine/core/CoreMotorTest.java | 5 +- 6 files changed, 56 insertions(+), 19 deletions(-) diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInput.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInput.java index af7ad192d..f3845e352 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInput.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/cyclelog/inputs/cyclelog/CycleLogInput.java @@ -16,6 +16,8 @@ package io.nosqlbench.engine.api.activityapi.cyclelog.inputs.cyclelog; +import io.nosqlbench.api.config.NBLabeledElement; +import io.nosqlbench.api.config.NBLabels; import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleResultsSegment; import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleSegment; import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleSegmentBuffer; @@ -36,9 +38,10 @@ import java.nio.channels.FileChannel; import java.util.Iterator; import java.util.function.Predicate; -public class CycleLogInput implements Input, AutoCloseable, Iterable, CanFilterResultValue { +public class CycleLogInput implements Input, AutoCloseable, Iterable, CanFilterResultValue, NBLabeledElement { private final static Logger logger = LogManager.getLogger(CycleLogInput.class); private final Iterator cycleResultSegmentIterator; + private final NBLabeledElement parent; private RandomAccessFile raf; private MappedByteBuffer mbb; private Iterator segmentIter; @@ -49,6 +52,7 @@ public class CycleLogInput implements Input, AutoCloseable, Iterable */ -public class AtomicInput implements Input, ActivityDefObserver, ProgressCapable { +public class AtomicInput implements Input, ActivityDefObserver, ProgressCapable, Gauge, NBLabeledElement { private final static Logger logger = LogManager.getLogger(AtomicInput.class); private final AtomicLong cycleValue = new AtomicLong(0L); @@ -56,10 +60,13 @@ public class AtomicInput implements Input, ActivityDefObserver, ProgressCapable private final long startedAt = System.currentTimeMillis(); private final ActivityDef activityDef; + private final NBLabeledElement parent; - public AtomicInput(ActivityDef activityDef) { + public AtomicInput(NBLabeledElement parent, ActivityDef activityDef) { + this.parent = parent; this.activityDef = activityDef; onActivityDefUpdate(activityDef); + ActivityMetrics.gauge(this,"cycle", this); } @Override @@ -140,7 +147,7 @@ public class AtomicInput implements Input, ActivityDefObserver, ProgressCapable this.recycleMax.set(recycles); } - public long getStarteAtMillis() { + public long getStartedAtMillis() { return this.startedAt; } @@ -151,16 +158,29 @@ public class AtomicInput implements Input, ActivityDefObserver, ProgressCapable @Override public ProgressMeterDisplay getProgressMeter() { - return new AtomicInputProgress(activityDef.getAlias(), this); + return new AtomicInputProgress(this, activityDef.getAlias(), this); } - private static class AtomicInputProgress implements ProgressMeterDisplay, CycleMeter { + @Override + public NBLabels getLabels() { + return parent.getLabels(); + } + + @Override + public Long getValue() { + return this.cycleValue.get(); + } + + private static class AtomicInputProgress implements NBLabeledElement, ProgressMeterDisplay, CycleMeter { private final AtomicInput input; private final String name; - public AtomicInputProgress(String name, AtomicInput input) { + private final NBLabeledElement parent; + + public AtomicInputProgress(NBLabeledElement parent, String name, AtomicInput input) { this.name = name; this.input = input; + this.parent = parent; } @Override @@ -170,7 +190,7 @@ public class AtomicInput implements Input, ActivityDefObserver, ProgressCapable @Override public Instant getStartTime() { - return Instant.ofEpochMilli(input.getStarteAtMillis()); + return Instant.ofEpochMilli(input.getStartedAtMillis()); } @Override @@ -208,5 +228,10 @@ public class AtomicInput implements Input, ActivityDefObserver, ProgressCapable public long getRecyclesMax() { return input.recycleMax.get(); } + + @Override + public NBLabels getLabels() { + return parent.getLabels(); + } } } diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/TargetRateInputType.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/TargetRateInputType.java index f150d1115..5ffb9ac40 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/TargetRateInputType.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/input/TargetRateInputType.java @@ -37,7 +37,7 @@ public class TargetRateInputType implements InputType { public Dispenser(Activity activity) { this.activity = activity; - this.input = new AtomicInput(activity.getActivityDef()); + this.input = new AtomicInput(activity, activity.getActivityDef()); } @Override diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInputTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInputTest.java index 0bcfd1ca1..85e49da3a 100644 --- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInputTest.java +++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityimpl/input/AtomicInputTest.java @@ -16,6 +16,7 @@ package io.nosqlbench.engine.api.activityimpl.input; +import io.nosqlbench.api.config.NBLabeledElement; import io.nosqlbench.engine.api.activityapi.cyclelog.buffers.results.CycleSegment; import io.nosqlbench.api.engine.activityimpl.ActivityDef; import org.junit.jupiter.api.Test; @@ -26,7 +27,7 @@ public class AtomicInputTest { @Test public void testEmptyIntervalShouldNotProvideValues() { - AtomicInput i = new AtomicInput(ActivityDef.parseActivityDef("alias=foo,cycles=23..23")); + AtomicInput i = new AtomicInput(NBLabeledElement.EMPTY,ActivityDef.parseActivityDef("alias=foo,cycles=23..23")); CycleSegment inputSegment = i.getInputSegment(1); assertThat(inputSegment).isNull(); diff --git a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java index f75c58fc2..654af310e 100644 --- a/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java +++ b/engine-core/src/test/java/io/nosqlbench/engine/core/ActivityExecutorTest.java @@ -127,9 +127,10 @@ class ActivityExecutorTest { final ActivityDef activityDef = ActivityDef.parseActivityDef("driver=diag;alias=test-dynamic-params;cycles=1000;initdelay=5000;"); new ActivityTypeLoader().load(activityDef,NBLabeledElement.EMPTY); - this.getActivityMotorFactory(this.motorActionDelay(999), new AtomicInput(activityDef)); - Activity simpleActivity = new SimpleActivity(activityDef, NBLabeledElement.forMap(Map.of())); + + this.getActivityMotorFactory(this.motorActionDelay(999), new AtomicInput(simpleActivity,activityDef)); + final InputDispenser inputDispenser = new CoreInputDispenser(simpleActivity); final ActionDispenser actionDispenser = new CoreActionDispenser(simpleActivity); final OutputDispenser outputDispenser = CoreServices.getOutputDispenser(simpleActivity).orElse(null); diff --git a/engine-core/src/test/java/io/nosqlbench/engine/core/CoreMotorTest.java b/engine-core/src/test/java/io/nosqlbench/engine/core/CoreMotorTest.java index 7de094d45..bf904f72e 100644 --- a/engine-core/src/test/java/io/nosqlbench/engine/core/CoreMotorTest.java +++ b/engine-core/src/test/java/io/nosqlbench/engine/core/CoreMotorTest.java @@ -38,11 +38,11 @@ public class CoreMotorTest { @Test public void testBasicActivityMotor() { - final BlockingSegmentInput lockstepper = new BlockingSegmentInput(); final Activity activity = new SimpleActivity( ActivityDef.parseActivityDef("alias=foo"), NBLabeledElement.forMap(Map.of("testing","coremotor")) ); + final BlockingSegmentInput lockstepper = new BlockingSegmentInput(); final Motor cm = new CoreMotor(activity, 5L, lockstepper); final AtomicLong observableAction = new AtomicLong(-3L); cm.setAction(this.getTestConsumer(observableAction)); @@ -60,8 +60,9 @@ public class CoreMotorTest { @Test public void testIteratorStride() { + SimpleActivity activity = new SimpleActivity("stride=3", NBLabeledElement.EMPTY); final BlockingSegmentInput lockstepper = new BlockingSegmentInput(); - final Motor cm1 = new CoreMotor(new SimpleActivity("stride=3",NBLabeledElement.EMPTY),1L, lockstepper); + final Motor cm1 = new CoreMotor(activity,1L, lockstepper); final AtomicLongArray ary = new AtomicLongArray(10); final Action a1 = this.getTestArrayConsumer(ary); cm1.setAction(a1);