diff --git a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapter.java b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapter.java index 5dfd1f20d..aa5e66300 100644 --- a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapter.java +++ b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutDriverAdapter.java @@ -16,27 +16,44 @@ package io.nosqlbench.adapter.stdout; +import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; import io.nosqlbench.engine.api.activityimpl.OpMapper; import io.nosqlbench.engine.api.activityimpl.uniform.BaseDriverAdapter; import io.nosqlbench.engine.api.activityimpl.uniform.DriverAdapter; -import io.nosqlbench.engine.api.activityimpl.uniform.flowtypes.Op; +import io.nosqlbench.engine.api.activityimpl.uniform.DriverSpaceCache; +import io.nosqlbench.engine.api.templating.OpTemplateSupplier; import io.nosqlbench.nb.annotations.Service; +import io.nosqlbench.nb.api.config.standard.ConfigModel; +import io.nosqlbench.nb.api.config.standard.NBConfigModel; import io.nosqlbench.nb.api.config.standard.NBConfiguration; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import java.util.List; +import java.util.Optional; import java.util.function.Function; -@Service(value= DriverAdapter.class, selector = "stdout") -public class StdoutDriverAdapter extends BaseDriverAdapter> { +@Service(value= DriverAdapter.class,selector = "stdout") +public class StdoutDriverAdapter extends BaseDriverAdapter implements OpTemplateSupplier, io.nosqlbench.engine.api.activityimpl.DefaultOpTemplateSupplier { @Override - public OpMapper getOpMapper() { - return new StdoutOpMapper(); + public OpMapper getOpMapper() { + DriverSpaceCache ctxCache = getSpaceCache(); + return new StdoutOpMapper(ctxCache); } @Override - public Function> getSpaceInitializer(NBConfiguration cfg) { - return name -> new ConcurrentHashMap<>(cfg.getMap()); + public Function getSpaceInitializer(NBConfiguration cfg) { + return (s) -> new StdoutSpace(cfg); + } + + @Override + public NBConfigModel getConfigModel() { + return ConfigModel.of(this.getClass()) + .add(super.getConfigModel()) + .add(StdoutSpace.getConfigModel()); + } + + @Override + public Optional> loadOpTemplates(NBConfiguration cfg) { + throw new RuntimeException("implement me"); } } diff --git a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOp.java b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOp.java index bdd933891..1f3842357 100644 --- a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOp.java +++ b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOp.java @@ -20,8 +20,17 @@ import io.nosqlbench.engine.api.activityimpl.uniform.flowtypes.RunnableOp; public class StdoutOp implements RunnableOp { + private final StdoutSpace ctx; + private final String text; + + public StdoutOp(StdoutSpace ctx, String text) { + this.ctx = ctx; + this.text = text; + } + @Override public void run() { + ctx.writeflush(text); } } diff --git a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOpDispenser.java b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOpDispenser.java index dbc575aff..a8faf3b6c 100644 --- a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOpDispenser.java +++ b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOpDispenser.java @@ -19,15 +19,26 @@ package io.nosqlbench.adapter.stdout; import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser; import io.nosqlbench.engine.api.templating.ParsedOp; -public class StdoutOpDispenser extends BaseOpDispenser { +import java.util.function.LongFunction; +public class StdoutOpDispenser extends BaseOpDispenser { - public StdoutOpDispenser(ParsedOp op) { - super(op); + private final LongFunction ctxfunc; + private final LongFunction outFunction; + + public StdoutOpDispenser(ParsedOp cmd, LongFunction ctxfunc) { + super(cmd); + this.ctxfunc = ctxfunc; + LongFunction objectFunction = cmd.getAsRequiredFunction("stmt", Object.class); + LongFunction stringfunc = l -> objectFunction.apply(l).toString(); + cmd.enhance(stringfunc,"suffix",String.class,(a,b) -> a+b); + this.outFunction = stringfunc; } @Override public StdoutOp apply(long value) { - return null; + StdoutSpace ctx = ctxfunc.apply(value); + String output = outFunction.apply(value); + return new StdoutOp(ctx,output); } } diff --git a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOpMapper.java b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOpMapper.java index 2b003120d..c4d53d54a 100644 --- a/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOpMapper.java +++ b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutOpMapper.java @@ -18,14 +18,24 @@ package io.nosqlbench.adapter.stdout; import io.nosqlbench.engine.api.activityimpl.OpDispenser; import io.nosqlbench.engine.api.activityimpl.OpMapper; -import io.nosqlbench.engine.api.activityimpl.uniform.flowtypes.Op; +import io.nosqlbench.engine.api.activityimpl.uniform.DriverSpaceCache; import io.nosqlbench.engine.api.templating.ParsedOp; -public class StdoutOpMapper implements OpMapper { +import java.util.function.LongFunction; + +public class StdoutOpMapper implements OpMapper { + + private final DriverSpaceCache ctxcache; + + public StdoutOpMapper(DriverSpaceCache ctxcache) { + this.ctxcache = ctxcache; + } @Override - public OpDispenser apply(ParsedOp cmd) { - return new StdoutOpDispenser(cmd); + public OpDispenser apply(ParsedOp cmd) { + LongFunction spacefunc = cmd.getAsFunctionOr("space", "default"); + LongFunction ctxfunc = (cycle) -> ctxcache.get(spacefunc.apply(cycle)); + return new StdoutOpDispenser(cmd,ctxfunc); } } diff --git a/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutSpace.java b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutSpace.java similarity index 86% rename from driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutSpace.java rename to adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutSpace.java index d6d09439b..e0efac7d8 100644 --- a/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutSpace.java +++ b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/StdoutSpace.java @@ -14,9 +14,12 @@ * limitations under the License. */ -package io.nosqlbench.adapters.stdout; +package io.nosqlbench.adapter.stdout; -import io.nosqlbench.nb.api.config.standard.*; +import io.nosqlbench.nb.api.config.standard.ConfigModel; +import io.nosqlbench.nb.api.config.standard.NBConfigModel; +import io.nosqlbench.nb.api.config.standard.NBConfiguration; +import io.nosqlbench.nb.api.config.standard.Param; import java.io.FileNotFoundException; import java.io.PrintWriter; @@ -32,9 +35,10 @@ public class StdoutSpace { this.writer = createPrintWriter(filename); } - public void write(String text) { + public void writeflush(String text) { try { writer.write(text); + writer.flush(); } catch (Exception e) { throw new RuntimeException(e); } @@ -70,7 +74,8 @@ public class StdoutSpace { Param.optional("format") .setRegex("csv|readout|json|inlinejson|assignments|diag") .setDescription("Which format to use.\n" + - "If provided, the format will override any statement formats provided by the YAML") + "If provided, the format will override any statement formats provided by the YAML. " + + "If 'diag' is used, a diagnostic readout will be provided for binding constructions.") ) .add( Param.defaultTo("bindings","doc") diff --git a/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/TemplateFormat.java b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/TemplateFormat.java similarity index 99% rename from driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/TemplateFormat.java rename to adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/TemplateFormat.java index 9cb2a294b..a0d5584a9 100644 --- a/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/TemplateFormat.java +++ b/adapter-stdout/src/main/java/io/nosqlbench/adapter/stdout/TemplateFormat.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.nosqlbench.adapters.stdout; +package io.nosqlbench.adapter.stdout; import java.util.ArrayList; import java.util.List; diff --git a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java index e8c539900..6bbdee0e6 100644 --- a/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java +++ b/driver-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivityType.java @@ -20,11 +20,9 @@ import io.nosqlbench.engine.api.activityapi.core.Action; import io.nosqlbench.engine.api.activityapi.core.ActionDispenser; import io.nosqlbench.engine.api.activityapi.core.ActivityType; import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import io.nosqlbench.nb.annotations.Service; import java.util.Optional; -@Service(value= ActivityType.class, selector="stdout-nb4") public class StdoutActivityType implements ActivityType { @Override diff --git a/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutDriverAdapter.java b/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutDriverAdapter.java deleted file mode 100644 index be2425b12..000000000 --- a/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutDriverAdapter.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2022 nosqlbench - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.nosqlbench.adapters.stdout; - -import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; -import io.nosqlbench.engine.api.activityimpl.OpMapper; -import io.nosqlbench.engine.api.activityimpl.uniform.BaseDriverAdapter; -import io.nosqlbench.engine.api.activityimpl.uniform.DriverSpaceCache; -import io.nosqlbench.engine.api.templating.OpTemplateSupplier; -import io.nosqlbench.nb.api.config.standard.ConfigModel; -import io.nosqlbench.nb.api.config.standard.NBConfigModel; -import io.nosqlbench.nb.api.config.standard.NBConfiguration; - -import java.util.List; -import java.util.Optional; -import java.util.function.Function; - -public class StdoutDriverAdapter extends BaseDriverAdapter implements OpTemplateSupplier { - - @Override - public OpMapper getOpMapper() { - DriverSpaceCache ctxCache = getSpaceCache(); - return new StdoutOpMapper(ctxCache); - } - - @Override - public Function getSpaceInitializer(NBConfiguration cfg) { - return (s) -> new StdoutSpace(cfg); - } - - @Override - public NBConfigModel getConfigModel() { - return ConfigModel.of(this.getClass()) - .add(super.getConfigModel()) - .add(StdoutSpace.getConfigModel()); - } - - @Override - public Optional> loadOpTemplates(NBConfiguration cfg) { - throw new RuntimeException("implement me"); - } -} diff --git a/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutOpDispenser.java b/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutOpDispenser.java deleted file mode 100644 index f7105263b..000000000 --- a/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutOpDispenser.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2022 nosqlbench - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.nosqlbench.adapters.stdout; - -import io.nosqlbench.engine.api.activityimpl.BaseOpDispenser; -import io.nosqlbench.engine.api.templating.ParsedOp; - -import java.util.function.LongFunction; - -public class StdoutOpDispenser extends BaseOpDispenser { - - private final LongFunction ctxfunc; - private final LongFunction outFunction; - - public StdoutOpDispenser(ParsedOp cmd, LongFunction ctxfunc) { - super(cmd); - this.ctxfunc = ctxfunc; - LongFunction objectFunction = cmd.getAsRequiredFunction("stmt", Object.class); - LongFunction stringfunc = l -> objectFunction.apply(l).toString(); - cmd.enhance(stringfunc,"suffix",String.class,(a,b) -> a+b); - this.outFunction = stringfunc; - } - - @Override - public StdoutOp apply(long value) { - StdoutSpace ctx = ctxfunc.apply(value); - String output = outFunction.apply(value); - return new StdoutOp(ctx,output); - } -} diff --git a/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutOpMapper.java b/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutOpMapper.java deleted file mode 100644 index 74481e1b0..000000000 --- a/driver-stdout/src/main/java/io/nosqlbench/adapters/stdout/StdoutOpMapper.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2022 nosqlbench - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.nosqlbench.adapters.stdout; - -import io.nosqlbench.engine.api.activityimpl.OpDispenser; -import io.nosqlbench.engine.api.activityimpl.OpMapper; -import io.nosqlbench.engine.api.activityimpl.uniform.DriverSpaceCache; -import io.nosqlbench.engine.api.templating.ParsedOp; - -import java.util.function.LongFunction; - -public class StdoutOpMapper implements OpMapper { - - private final DriverSpaceCache ctxcache; - - public StdoutOpMapper(DriverSpaceCache ctxcache) { - this.ctxcache = ctxcache; - } - - @Override - public OpDispenser apply(ParsedOp cmd) { - LongFunction spacefunc = cmd.getAsFunctionOr("space", "default"); - LongFunction ctxfunc = (cycle) -> ctxcache.get(spacefunc.apply(cycle)); - return new StdoutOpDispenser(cmd,ctxfunc); - } - -} diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java index c28438624..a8a6244b1 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityimpl/uniform/StandardActivity.java @@ -18,11 +18,9 @@ package io.nosqlbench.engine.api.activityimpl.uniform; import io.nosqlbench.engine.api.activityapi.planning.OpSequence; import io.nosqlbench.engine.api.activityconfig.StatementsLoader; +import io.nosqlbench.engine.api.activityconfig.yaml.OpTemplate; import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList; -import io.nosqlbench.engine.api.activityimpl.ActivityDef; -import io.nosqlbench.engine.api.activityimpl.OpDispenser; -import io.nosqlbench.engine.api.activityimpl.OpMapper; -import io.nosqlbench.engine.api.activityimpl.SimpleActivity; +import io.nosqlbench.engine.api.activityimpl.*; import io.nosqlbench.engine.api.activityimpl.uniform.flowtypes.Op; import io.nosqlbench.nb.api.config.standard.*; import io.nosqlbench.nb.api.errors.OpConfigError; @@ -43,7 +41,7 @@ import java.util.function.Function; * @param A type of runnable which wraps the operations for this type of driver. * @param The context type for the activity, AKA the 'space' for a named driver instance and its associated object graph */ -public class StandardActivity extends SimpleActivity { +public class StandardActivity extends SimpleActivity implements DefaultOpTemplateSupplier { private final static Logger logger = LogManager.getLogger("ACTIVITY"); private final DriverAdapter adapter; @@ -121,4 +119,13 @@ public class StandardActivity extends SimpleActivity { // // ActivityDefObserver.apply(activityDef, adapter, sequence); } + + @Override + public List getDefaultTemplates(StmtsDocList optionalDocs) { + if (adapter instanceof DefaultOpTemplateSupplier s) { + return s.getDefaultTemplates(optionalDocs); + } else { + return List.of(); + } + } }