diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtils.java b/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtils.java
new file mode 100644
index 000000000..f02592c3b
--- /dev/null
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtils.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2023 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.engine.extensions.vectormath;
+
+import com.datastax.oss.driver.api.core.cql.Row;
+
+import java.util.List;
+
+public class CqlUtils {
+
+ public static long[] cqlRowFieldsToLongArray(String fieldName, List rows) {
+ return rows.stream().mapToLong(r -> r.getLong(fieldName)).toArray();
+ }
+
+ public static String[] cqlRowFieldsToStringArray(String fieldName, List rows) {
+ return rows.stream().map(r -> r.getString(fieldName)).toArray(String[]::new);
+ }
+
+ public static int[] cqlRowListToIntArray(String fieldName, List rows) {
+ return rows.stream().mapToInt(r -> r.getInt(fieldName)).toArray();
+ }
+
+
+}
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/VectorMathPluginInfo.java b/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtilsPluginInfo.java
similarity index 72%
rename from adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/VectorMathPluginInfo.java
rename to adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtilsPluginInfo.java
index 1828100a2..6d1fd5478 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/VectorMathPluginInfo.java
+++ b/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/CqlUtilsPluginInfo.java
@@ -18,19 +18,19 @@ package io.nosqlbench.engine.extensions.vectormath;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value = ScriptingPluginInfo.class,selector = "vectormath")
-public class VectorMathPluginInfo implements ScriptingPluginInfo {
+@Service(value = ScriptingExtensionPluginInfo.class,selector = "cql_utils")
+public class CqlUtilsPluginInfo implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
return "various methods and utilities for working with vector math in a scripted environment";
}
@Override
- public VectorMath getExtensionObject(Logger logger, MetricRegistry metricRegistry, LabeledScenarioContext scriptContext) {
- return new VectorMath();
+ public CqlUtils getExtensionObject(Logger logger, MetricRegistry metricRegistry, LabeledScenarioContext scriptContext) {
+ return new CqlUtils();
}
}
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/VectorMath.java b/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/VectorMath.java
deleted file mode 100644
index a529d0b21..000000000
--- a/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/VectorMath.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2023 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.engine.extensions.vectormath;
-
-import com.datastax.oss.driver.api.core.cql.Row;
-
-import java.util.Arrays;
-import java.util.List;
-
-public class VectorMath {
-
- public static long[] rowFieldsToLongArray(String fieldName, List rows) {
- return rows.stream().mapToLong(r -> r.getLong(fieldName)).toArray();
- }
-
- public static String[] rowFieldsToStringArray(String fieldName, List rows) {
- return rows.stream().map(r -> r.getString(fieldName)).toArray(String[]::new);
- }
-
- public static long[] stringArrayAsALongArray(String[] strings) {
- long[] longs = new long[strings.length];
- for (int i = 0; i < longs.length; i++) {
- longs[i]=Long.parseLong(strings[i]);
- }
- return longs;
- }
-
- public static int[] stringArrayAsIntArray(String[] strings) {
- int[] ints = new int[strings.length];
- for (int i = 0; i < ints.length; i++) {
- ints[i]=Integer.parseInt(strings[i]);
- }
- return ints;
- }
-
- public static int[] rowListToIntArray(String fieldName, List rows) {
- return rows.stream().mapToInt(r -> r.getInt(fieldName)).toArray();
- }
-
- public static double computeRecall(long[] referenceIndexes, long[] sampleIndexes) {
- Arrays.sort(referenceIndexes);
- Arrays.sort(sampleIndexes);
- long[] intersection = Intersections.find(referenceIndexes,sampleIndexes);
- return (double)intersection.length/(double)referenceIndexes.length;
- }
-
- public static double computeRecall(int[] referenceIndexes, int[] sampleIndexes) {
- Arrays.sort(referenceIndexes);
- Arrays.sort(sampleIndexes);
- int[] intersection = Intersections.find(referenceIndexes,sampleIndexes);
- return (double)intersection.length/(double)referenceIndexes.length;
- }
-
-
-}
diff --git a/adapter-cqld4/src/test/java/io/nosqlbench/engine/extensions/vectormath/VectorMathTest.java b/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/scriptingutils/PineconeScriptingUtils.java
similarity index 54%
rename from adapter-cqld4/src/test/java/io/nosqlbench/engine/extensions/vectormath/VectorMathTest.java
rename to adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/scriptingutils/PineconeScriptingUtils.java
index 334a6c008..7e89f0323 100644
--- a/adapter-cqld4/src/test/java/io/nosqlbench/engine/extensions/vectormath/VectorMathTest.java
+++ b/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/scriptingutils/PineconeScriptingUtils.java
@@ -14,27 +14,19 @@
* limitations under the License.
*/
-package io.nosqlbench.engine.extensions.vectormath;
+package io.nosqlbench.engine.extensions.scriptingutils;
-import org.junit.jupiter.api.Test;
-class VectorMathTest {
+import io.pinecone.proto.QueryResponse;
+import io.pinecone.proto.ScoredVector;
- private VectorMath vm = new VectorMath();
+public class PineconeScriptingUtils {
- @Test
- void computeRecallForRowListVsLongIndexList() {
- VectorMath.computeRecall(new long[]{}, new long[]{});
+ public String[] responseIdsToStringArray(QueryResponse response) {
+ return response.getMatchesList().stream().map(ScoredVector::getId).toArray(String[]::new);
}
- @Test
- void computeRecallForRowListVsIntIndexList() {
+ public int[] responseIdsToIntArray(QueryResponse response) {
+ return response.getMatchesList().stream().mapToInt(r -> Integer.parseInt(r.getId())).toArray();
}
- @Test
- void computeRecallForRowListVsIntIndexArray() {
- }
-
- @Test
- void computeRecallForRowListVsLongIndexArray() {
- }
}
diff --git a/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeVectorMathPluginInfo.java b/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/scriptingutils/PineconeScriptingUtilsPluginInfo.java
similarity index 66%
rename from adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeVectorMathPluginInfo.java
rename to adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/scriptingutils/PineconeScriptingUtilsPluginInfo.java
index a15cd4419..010d51b4e 100644
--- a/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeVectorMathPluginInfo.java
+++ b/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/scriptingutils/PineconeScriptingUtilsPluginInfo.java
@@ -14,23 +14,23 @@
* limitations under the License.
*/
-package io.nosqlbench.engine.extensions.vectormath;
+package io.nosqlbench.engine.extensions.scriptingutils;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value = ScriptingPluginInfo.class,selector = "pinecone_vectormath")
-public class PineconeVectorMathPluginInfo implements ScriptingPluginInfo {
+@Service(value = ScriptingExtensionPluginInfo.class,selector = "pinecone_utils")
+public class PineconeScriptingUtilsPluginInfo implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
return "various methods and utilities for working with vector math in a scripted environment";
}
@Override
- public PineconeVectorMath getExtensionObject(Logger logger, MetricRegistry metricRegistry, LabeledScenarioContext scriptContext) {
- return new PineconeVectorMath();
+ public PineconeScriptingUtils getExtensionObject(Logger logger, MetricRegistry metricRegistry, LabeledScenarioContext scriptContext) {
+ return new PineconeScriptingUtils();
}
}
diff --git a/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeIntersections.java b/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeIntersections.java
deleted file mode 100644
index ae8e4094a..000000000
--- a/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeIntersections.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2023 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.engine.extensions.vectormath;
-
-import java.util.Arrays;
-
-public class PineconeIntersections {
-
- public static long[] find(long[] reference, long[] sample) {
- long[] result = new long[reference.length];
- int a_index = 0, b_index = 0, acc_index = -1;
- long a_element, b_element;
- while (a_index < reference.length && b_index < sample.length) {
- a_element = reference[a_index];
- b_element = sample[b_index];
- if (a_element == b_element) {
- result = resize(result);
- result[++acc_index] = a_element;
- a_index++;
- b_index++;
- } else if (b_element < a_element) {
- b_index++;
- } else {
- a_index++;
- }
- }
- return Arrays.copyOfRange(result,0,acc_index+1);
- }
-
- public static int[] find(int[] reference, int[] sample) {
- int[] result = new int[reference.length];
- int a_index = 0, b_index = 0, acc_index = -1;
- int a_element, b_element;
- while (a_index < reference.length && b_index < sample.length) {
- a_element = reference[a_index];
- b_element = sample[b_index];
- if (a_element == b_element) {
- result = resize(result);
- result[++acc_index] = a_element;
- a_index++;
- b_index++;
- } else if (b_element < a_element) {
- b_index++;
- } else {
- a_index++;
- }
- }
- return Arrays.copyOfRange(result,0,acc_index+1);
- }
-
- public static int[] resize(int[] arr) {
- int len = arr.length;
- int[] copy = new int[len + 1];
- for (int i = 0; i < len; i++) {
- copy[i] = arr[i];
- }
- return copy;
- }
-
- public static long[] resize(long[] arr) {
- int len = arr.length;
- long[] copy = new long[len + 1];
- for (int i = 0; i < len; i++) {
- copy[i] = arr[i];
- }
- return copy;
- }
-
-}
diff --git a/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeVectorMath.java b/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeVectorMath.java
deleted file mode 100644
index edc17394e..000000000
--- a/adapter-pinecone/src/main/java/io/nosqlbench/engine/extensions/vectormath/PineconeVectorMath.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2023 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.engine.extensions.vectormath;
-
-import io.pinecone.proto.QueryResponse;
-import io.pinecone.proto.ScoredVector;
-
-import java.util.Arrays;
-
-public class PineconeVectorMath {
-
- public static long[] stringArrayAsALongArray(String[] strings) {
- long[] longs = new long[strings.length];
- for (int i = 0; i < longs.length; i++) {
- longs[i]=Long.parseLong(strings[i]);
- }
- return longs;
- }
-
- public static int[] stringArrayAsIntArray(String[] strings) {
- int[] ints = new int[strings.length];
- for (int i = 0; i < ints.length; i++) {
- ints[i]=Integer.parseInt(strings[i]);
- }
- return ints;
- }
-
- public static String[] idsToStringArray(QueryResponse response) {
- return response.getMatchesList().stream().map(ScoredVector::getId).toArray(String[]::new);
- }
-
- public static int[] idsToIntArray(QueryResponse response) {
- return response.getMatchesList().stream().mapToInt(r -> Integer.parseInt(r.getId())).toArray();
- }
-
- public static double computeRecall(long[] referenceIndexes, long[] sampleIndexes) {
- Arrays.sort(referenceIndexes);
- Arrays.sort(sampleIndexes);
- long[] intersection = PineconeIntersections.find(referenceIndexes,sampleIndexes);
- return (double)intersection.length/(double)referenceIndexes.length;
- }
-
- public static double computeRecall(int[] referenceIndexes, int[] sampleIndexes) {
- Arrays.sort(referenceIndexes);
- Arrays.sort(sampleIndexes);
- int[] intersection = PineconeIntersections.find(referenceIndexes,sampleIndexes);
- return (double)intersection.length/(double)referenceIndexes.length;
- }
-
-}
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
index 3354d3879..2305f4a5d 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/activityimpl/BaseOpDispenser.java
@@ -68,7 +68,8 @@ public abstract class BaseOpDispenser implements OpDispenser
/**
* package imports used with "verifiers" or "expected-result" are accumulated here
*/
- private final List verifierImports = new ArrayList();
+ private final List verifierImports = new ArrayList<>();
+ private final List> verifierStaticImports = new ArrayList<>();
/**
* optional invokable functions which throw exceptions when results are not verifiable.
* This variable is kept here for diagnostics and debugging. The actual instance used within
@@ -129,7 +130,7 @@ public abstract class BaseOpDispenser implements OpDispenser
try {
initBlocks.forEach((initName, stringTemplate) -> {
GroovyCycleFunction> initFunction =
- new GroovyCycleFunction<>(initName,stringTemplate,verifierImports,variables);
+ new GroovyCycleFunction<>(initName,stringTemplate,verifierImports,verifierStaticImports,variables);
logger.info("configured verifier init:" + initFunction);
initFunction.setVariable("_parsed_op",op);
initFunction.apply(0L);
@@ -143,7 +144,7 @@ public abstract class BaseOpDispenser implements OpDispenser
try {
namedVerifiers.forEach((verifierName,stringTemplate) -> {
GroovyBooleanCycleFunction verifier =
- new GroovyBooleanCycleFunction(verifierName, stringTemplate, verifierImports, variables);
+ new GroovyBooleanCycleFunction(verifierName, stringTemplate, verifierImports, verifierStaticImports, variables);
logger.info("configured verifier:" + verifier);
verifierFunctions.add(verifier);
});
@@ -153,7 +154,7 @@ public abstract class BaseOpDispenser implements OpDispenser
try {
op.takeAsOptionalStringTemplate(EXPECTED_RESULT)
- .map(tpl -> new GroovyObjectEqualityFunction(op.getName()+"-"+EXPECTED_RESULT, tpl, verifierImports, variables))
+ .map(tpl -> new GroovyObjectEqualityFunction(op.getName()+"-"+EXPECTED_RESULT, tpl, verifierImports, verifierStaticImports, variables))
.map(vl -> {
logger.info("Configured equality verifier: " + vl);
return vl;
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyBooleanCycleFunction.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyBooleanCycleFunction.java
index d92a3df30..79cb33763 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyBooleanCycleFunction.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyBooleanCycleFunction.java
@@ -23,8 +23,8 @@ import java.util.List;
public class GroovyBooleanCycleFunction extends GroovyCycleFunction {
- public GroovyBooleanCycleFunction(String name, ParsedTemplateString template, List imports, Binding binding) {
- super(name, template, imports, binding);
+ public GroovyBooleanCycleFunction(String name, ParsedTemplateString template, List imports, List> staticSymbolImports, Binding binding) {
+ super(name, template, imports, staticSymbolImports, binding);
}
@Override
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyCycleFunction.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyCycleFunction.java
index 1686146b3..86b0bcd08 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyCycleFunction.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyCycleFunction.java
@@ -21,7 +21,7 @@ import groovy.lang.GroovyShell;
import groovy.lang.Script;
import io.nosqlbench.adapters.api.activityimpl.BaseOpDispenser;
import io.nosqlbench.api.extensions.SandboxExtensionFinder;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.virtdata.core.bindings.Bindings;
import io.nosqlbench.virtdata.core.bindings.BindingsTemplate;
import io.nosqlbench.virtdata.core.templates.BindPoint;
@@ -39,12 +39,14 @@ public class GroovyCycleFunction implements CycleFunction {
private final static Logger logger = LogManager.getLogger(GroovyBooleanCycleFunction.class);
private final String name;
private final List imports;
- private final List enabledServices = new ArrayList<>(List.of("vectormath"));
+// private final List enabledServices = new ArrayList<>(List.of("vectormath"));
+ private final List enabledServices = new ArrayList<>();
protected String scriptText; // Groovy script as provided
protected final Script script; // Groovy Script as compiled
protected final Binding variableBindings; // Groovy binding layer
protected final Bindings bindingFunctions; // NB bindings
+ private final List> staticImports;
/**
* Instantiate a cycle function from basic types
@@ -56,10 +58,11 @@ public class GroovyCycleFunction implements CycleFunction {
* @param imports
* The package imports to be installed into the execution environment
*/
- public GroovyCycleFunction(String name, String scriptText, Map bindingSpecs, List imports, Binding binding) {
+ public GroovyCycleFunction(String name, String scriptText, Map bindingSpecs, List imports, List> staticImports, Binding binding) {
this.name = name;
this.scriptText = scriptText;
this.imports = imports;
+ this.staticImports = staticImports;
// scripting env variable bindings
this.variableBindings = binding!=null? binding : new Binding();
@@ -67,12 +70,13 @@ public class GroovyCycleFunction implements CycleFunction {
// virtdata bindings to be evaluated at cycle time
this.bindingFunctions = new BindingsTemplate().addFieldBindings(bindingSpecs).resolveBindings();
- this.script = compileScript(this.scriptText, imports, binding);
+ this.script = compileScript(this.scriptText, imports, staticImports, binding);
addServices();
}
private void addServices() {
- for (final ScriptingPluginInfo> extensionDescriptor : SandboxExtensionFinder.findAll()) {
+ for (final ScriptingExtensionPluginInfo> extensionDescriptor : SandboxExtensionFinder.findAll()) {
+ staticImports.addAll(extensionDescriptor.autoImportStaticMethodClasses());
if (!extensionDescriptor.isAutoLoading()) {
logger.info(() -> "Not loading " + extensionDescriptor + ", autoloading is false");
continue;
@@ -94,28 +98,35 @@ public class GroovyCycleFunction implements CycleFunction {
}
}
- public GroovyCycleFunction(String name, ParsedTemplateString template, List imports, Binding binding) {
+ public GroovyCycleFunction(String name, ParsedTemplateString template, List imports, List> staticImports, Binding binding) {
this(
name,
template.getPositionalStatement(),
resolveBindings(template.getBindPoints()),
imports,
+ staticImports,
binding
);
}
- private Script compileScript(String scriptText, List imports, Binding binding) {
+ private Script compileScript(String scriptText, List imports, List> staticImports, Binding binding) {
// add classes which are in the imports to the groovy evaluation context
String[] verifiedClasses = expandClassNames(imports);
+ String[] verifiedStaticImports = expandStaticImports(staticImports);
CompilerConfiguration compilerConfiguration = new CompilerConfiguration();
ImportCustomizer importer = new ImportCustomizer().addImports(verifiedClasses);
+ importer.addStaticStars(verifiedStaticImports);
compilerConfiguration.addCompilationCustomizers(importer);
GroovyShell gshell = new GroovyShell(binding!=null? binding:new Binding(), compilerConfiguration);
return gshell.parse(scriptText);
}
+ private String[] expandStaticImports(List> staticImports) {
+ return staticImports.stream().map(Class::getCanonicalName).toArray(String[]::new);
+ }
+
private static Map resolveBindings(List bindPoints) {
return new BindingsTemplate(bindPoints).getMap();
}
@@ -166,16 +177,17 @@ public class GroovyCycleFunction implements CycleFunction {
*/
@Override
public CycleFunction newInstance() {
- return new GroovyCycleFunction(name, scriptText, bindingFunctions, imports, this.variableBindings.getVariables());
+ return new GroovyCycleFunction(name, scriptText, bindingFunctions, imports, staticImports, this.variableBindings.getVariables());
}
- private GroovyCycleFunction(String name, String scriptText, Bindings bindingFunctions, List imports, Map originalBinding) {
+ private GroovyCycleFunction(String name, String scriptText, Bindings bindingFunctions, List imports, List> staticImports, Map originalBinding) {
this.name = name;
this.scriptText = scriptText;
this.bindingFunctions = bindingFunctions;
this.imports = imports;
+ this.staticImports = staticImports;
- this.script = compileScript(scriptText, imports, new Binding());
+ this.script = compileScript(scriptText, imports, staticImports, new Binding());
this.variableBindings = script.getBinding();
originalBinding.forEach((k,v) -> variableBindings.setVariable(k.toString(),v));
}
diff --git a/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyObjectEqualityFunction.java b/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyObjectEqualityFunction.java
index d20f35b9c..70c1a5027 100644
--- a/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyObjectEqualityFunction.java
+++ b/adapters-api/src/main/java/io/nosqlbench/adapters/api/evalcontext/GroovyObjectEqualityFunction.java
@@ -33,8 +33,8 @@ public class GroovyObjectEqualityFunction extends GroovyCycleFunction {
private Object result;
- public GroovyObjectEqualityFunction(String name, ParsedTemplateString template, List imports, Binding binding) {
- super(name, template, imports, binding);
+ public GroovyObjectEqualityFunction(String name, ParsedTemplateString template, List imports, List> staticImports, Binding binding) {
+ super(name, template, imports, staticImports, binding);
}
@Override
diff --git a/adapters-api/src/test/java/io/nosqlbench/adapters/api/evalcontext/CompoundCycleFunctionTest.java b/adapters-api/src/test/java/io/nosqlbench/adapters/api/evalcontext/CompoundCycleFunctionTest.java
index 67386e9a0..8ef62a497 100644
--- a/adapters-api/src/test/java/io/nosqlbench/adapters/api/evalcontext/CompoundCycleFunctionTest.java
+++ b/adapters-api/src/test/java/io/nosqlbench/adapters/api/evalcontext/CompoundCycleFunctionTest.java
@@ -25,8 +25,8 @@ import static org.assertj.core.api.Assertions.assertThat;
public class CompoundCycleFunctionTest {
- private final GroovyCycleFunction truthy = new GroovyCycleFunction<>("truthy", "true;", Map.of(), List.of(),null);
- private final GroovyCycleFunction falsy = new GroovyCycleFunction<>("falsy", "false;", Map.of(), List.of(), null);
+ private final GroovyCycleFunction truthy = new GroovyCycleFunction<>("truthy", "true;", Map.of(), List.of(), List.of(),null);
+ private final GroovyCycleFunction falsy = new GroovyCycleFunction<>("falsy", "false;", Map.of(), List.of(), List.of(), null);
@Test
public void testReducerFirstOrLastResult() {
diff --git a/adapters-api/src/test/java/io/nosqlbench/adapters/api/evalcontext/GroovyBooleanCycleFunctionTest.java b/adapters-api/src/test/java/io/nosqlbench/adapters/api/evalcontext/GroovyBooleanCycleFunctionTest.java
index 42cbfed7b..6b85c5554 100644
--- a/adapters-api/src/test/java/io/nosqlbench/adapters/api/evalcontext/GroovyBooleanCycleFunctionTest.java
+++ b/adapters-api/src/test/java/io/nosqlbench/adapters/api/evalcontext/GroovyBooleanCycleFunctionTest.java
@@ -36,7 +36,7 @@ public class GroovyBooleanCycleFunctionTest {
Map.of("numbername", "NumberNameToString()")
);
List imports = List.of();
- GroovyBooleanCycleFunction function = new GroovyBooleanCycleFunction("test1", parsedTemplate, imports, null);
+ GroovyBooleanCycleFunction function = new GroovyBooleanCycleFunction("test1", parsedTemplate, imports, List.of(), null);
Boolean result = function.apply(2);
assertThat(result).isTrue();
}
@@ -49,7 +49,7 @@ public class GroovyBooleanCycleFunctionTest {
Map.of("numbername", "NumberNameToString()")
);
List imports = List.of();
- GroovyCycleFunction function = new GroovyBooleanCycleFunction("test2", parsedTemplate, imports, null);
+ GroovyCycleFunction function = new GroovyBooleanCycleFunction("test2", parsedTemplate, imports, List.of(),null);
System.out.println(function);
assertThatThrownBy(() -> function.apply(3L)).isInstanceOf(MissingPropertyException.class);
}
diff --git a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/Scenario.java b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/Scenario.java
index c09d8aeb7..601f4e869 100644
--- a/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/Scenario.java
+++ b/engine-core/src/main/java/io/nosqlbench/engine/core/lifecycle/scenario/Scenario.java
@@ -25,7 +25,7 @@ import io.nosqlbench.api.engine.metrics.ActivityMetrics;
import io.nosqlbench.api.metadata.ScenarioMetadata;
import io.nosqlbench.api.metadata.ScenarioMetadataAware;
import io.nosqlbench.api.metadata.SystemId;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.engine.api.scripting.ScriptEnvBuffer;
import io.nosqlbench.engine.core.annotation.Annotators;
import io.nosqlbench.engine.core.lifecycle.ExecutionMetricsResult;
@@ -211,7 +211,7 @@ public class Scenario implements Callable, NBLabeledElem
this.scriptEngine.put("metrics", new PolyglotMetricRegistryBindings(metricRegistry));
this.scriptEngine.put("activities", new ActivityBindings(scenarioController));
- for (final ScriptingPluginInfo> extensionDescriptor : SandboxExtensionFinder.findAll()) {
+ for (final ScriptingExtensionPluginInfo> extensionDescriptor : SandboxExtensionFinder.findAll()) {
if (!extensionDescriptor.isAutoLoading()) {
this.logger.info(() -> "Not loading " + extensionDescriptor + ", autoloading is false");
continue;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctionPluginInfo.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctionPluginInfo.java
new file mode 100644
index 000000000..055ccd0c4
--- /dev/null
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctionPluginInfo.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 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.engine.extensions.computefunctions;
+
+import com.codahale.metrics.MetricRegistry;
+import io.nosqlbench.api.config.LabeledScenarioContext;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
+import io.nosqlbench.nb.annotations.Service;
+import org.apache.logging.log4j.Logger;
+
+import java.util.List;
+
+@Service(value = ScriptingExtensionPluginInfo.class,selector = "compute")
+public class ComputeFunctionPluginInfo implements ScriptingExtensionPluginInfo {
+ @Override
+ public String getDescription() {
+ return "Various small math utilities.";
+ }
+
+ @Override
+ public ComputeFunctions getExtensionObject(Logger logger, MetricRegistry metricRegistry, LabeledScenarioContext scriptContext) {
+ return new ComputeFunctions();
+ }
+
+ @Override
+ public List> autoImportStaticMethodClasses() {
+ return List.of(ComputeFunctions.class);
+ }
+}
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctions.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctions.java
new file mode 100644
index 000000000..0f5cc1476
--- /dev/null
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctions.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2023 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.engine.extensions.computefunctions;
+
+import java.util.Arrays;
+
+public class ComputeFunctions {
+
+ /**
+ * Compute the recall as the proportion of matching indices divided by the expected indices
+ * @param referenceIndexes long array of indices
+ * @param sampleIndexes long array of indices
+ * @return a fractional measure of matching vs expected indices
+ */
+ public static double recall(long[] referenceIndexes, long[] sampleIndexes) {
+ Arrays.sort(referenceIndexes);
+ Arrays.sort(sampleIndexes);
+ long[] intersection = Intersections.find(referenceIndexes, sampleIndexes);
+ return (double) intersection.length / (double) referenceIndexes.length;
+ }
+
+ /**
+ * Compute the recall as the proportion of matching indices divided by the expected indices
+ * @param referenceIndexes int array of indices
+ * @param sampleIndexes int array of indices
+ * @return a fractional measure of matching vs expected indices
+ */
+ public static double recall(int[] referenceIndexes, int[] sampleIndexes) {
+ Arrays.sort(referenceIndexes);
+ Arrays.sort(sampleIndexes);
+ int intersection = Intersections.count(referenceIndexes, sampleIndexes);
+ return (double) intersection / (double) referenceIndexes.length;
+ }
+
+ /**
+ * Compute the intersection of two long arrays
+ */
+ public static long[] intersection(long[] a, long[] b) {
+ return Intersections.find(a,b);
+ }
+
+ /**
+ * Compute the intersection of two int arrays
+ */
+ public static int[] intersection(int[] reference, int[] sample) {
+ return Intersections.find(reference, sample);
+ }
+
+ /**
+ * Compute the size of the intersection of two int arrays
+ */
+ public static int intersectionSize(int[] reference, int[] sample) {
+ return Intersections.count(reference, sample);
+ }
+
+
+}
diff --git a/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/Intersections.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/Intersections.java
similarity index 92%
rename from adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/Intersections.java
rename to engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/Intersections.java
index 24caaad05..9db074467 100644
--- a/adapter-cqld4/src/main/java/io/nosqlbench/engine/extensions/vectormath/Intersections.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/Intersections.java
@@ -14,12 +14,31 @@
* limitations under the License.
*/
-package io.nosqlbench.engine.extensions.vectormath;
+package io.nosqlbench.engine.extensions.computefunctions;
import java.util.Arrays;
public class Intersections {
+ public static int count(int[] reference, int[] sample) {
+ int a_index = 0, b_index = 0, matches = 0;
+ int a_element, b_element;
+ while (a_index < reference.length && b_index < sample.length) {
+ a_element = reference[a_index];
+ b_element = sample[b_index];
+ if (a_element == b_element) {
+ ++matches;
+ a_index++;
+ b_index++;
+ } else if (b_element < a_element) {
+ b_index++;
+ } else {
+ a_index++;
+ }
+ }
+ return matches;
+ }
+
public static long count(long[] reference, long[] sample) {
int a_index = 0, b_index = 0, matches = 0;
long a_element, b_element;
@@ -39,27 +58,6 @@ public class Intersections {
return matches;
}
- public static long[] find(long[] reference, long[] sample) {
- long[] result = new long[reference.length];
- int a_index = 0, b_index = 0, acc_index = -1;
- long a_element, b_element;
- while (a_index < reference.length && b_index < sample.length) {
- a_element = reference[a_index];
- b_element = sample[b_index];
- if (a_element == b_element) {
- result = resize(result);
- result[++acc_index] = a_element;
- a_index++;
- b_index++;
- } else if (b_element < a_element) {
- b_index++;
- } else {
- a_index++;
- }
- }
- return Arrays.copyOfRange(result,0,acc_index+1);
- }
-
public static int[] find(int[] reference, int[] sample) {
int[] result = new int[reference.length];
int a_index = 0, b_index = 0, acc_index = -1;
@@ -80,15 +78,16 @@ public class Intersections {
}
return Arrays.copyOfRange(result,0,acc_index+1);
}
-
- public static int count(int[] reference, int[] sample) {
- int a_index = 0, b_index = 0, matches = 0;
- int a_element, b_element;
+ public static long[] find(long[] reference, long[] sample) {
+ long[] result = new long[reference.length];
+ int a_index = 0, b_index = 0, acc_index = -1;
+ long a_element, b_element;
while (a_index < reference.length && b_index < sample.length) {
a_element = reference[a_index];
b_element = sample[b_index];
if (a_element == b_element) {
- ++matches;
+ result = resize(result);
+ result[++acc_index] = a_element;
a_index++;
b_index++;
} else if (b_element < a_element) {
@@ -97,25 +96,22 @@ public class Intersections {
a_index++;
}
}
- return matches;
+ return Arrays.copyOfRange(result,0,acc_index+1);
}
- public static int[] resize(int[] arr) {
+ private static int[] resize(int[] arr) {
int len = arr.length;
int[] copy = new int[len + 1];
- for (int i = 0; i < len; i++) {
- copy[i] = arr[i];
- }
+ System.arraycopy(arr, 0, copy, 0, len);
return copy;
}
- public static long[] resize(long[] arr) {
+ private static long[] resize(long[] arr) {
int len = arr.length;
long[] copy = new long[len + 1];
- for (int i = 0; i < len; i++) {
- copy[i] = arr[i];
- }
+ System.arraycopy(arr, 0, copy, 0, len);
return copy;
}
+
}
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/conversions/ConversionUtilsPluginInfo.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/conversions/ConversionUtilsPluginInfo.java
new file mode 100644
index 000000000..740b0c9fe
--- /dev/null
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/conversions/ConversionUtilsPluginInfo.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 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.engine.extensions.conversions;
+
+import com.codahale.metrics.MetricRegistry;
+import io.nosqlbench.api.config.LabeledScenarioContext;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
+import io.nosqlbench.nb.annotations.Service;
+import org.apache.logging.log4j.Logger;
+
+import java.util.List;
+
+@Service(value = ScriptingExtensionPluginInfo.class,selector = "convert")
+public class ConversionUtilsPluginInfo implements ScriptingExtensionPluginInfo {
+ @Override
+ public String getDescription() {
+ return "Utilities to convert between common basic data types";
+ }
+
+ @Override
+ public ConverterUtils getExtensionObject(Logger logger, MetricRegistry metricRegistry, LabeledScenarioContext scriptContext) {
+ return new ConverterUtils();
+ }
+
+ @Override
+ public List> autoImportStaticMethodClasses() {
+ return List.of(ConverterUtils.class);
+ }
+}
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/conversions/ConverterUtils.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/conversions/ConverterUtils.java
new file mode 100644
index 000000000..3af9e9c9a
--- /dev/null
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/conversions/ConverterUtils.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2023 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.engine.extensions.conversions;
+
+public class ConverterUtils {
+ public static int[] toIntArray(String[] strings) {
+ int[] ints = new int[strings.length];
+ for (int i = 0; i < ints.length; i++) {
+ ints[i]=Integer.parseInt(strings[i]);
+ }
+ return ints;
+ }
+
+ public static long[] toLongArray(String[] strings) {
+ long[] longs = new long[strings.length];
+ for (int i = 0; i < longs.length; i++) {
+ longs[i]=Long.parseLong(strings[i]);
+ }
+ return longs;
+ }
+}
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPluginData.java
index 9a1b6c5ed..eb5471173 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvmetrics/CSVMetricsPluginData.java
@@ -18,12 +18,12 @@ package io.nosqlbench.engine.extensions.csvmetrics;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value = ScriptingPluginInfo.class, selector = "csvmetrics")
-public class CSVMetricsPluginData implements ScriptingPluginInfo {
+@Service(value = ScriptingExtensionPluginInfo.class, selector = "csvmetrics")
+public class CSVMetricsPluginData implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvoutput/CsvOutputPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvoutput/CsvOutputPluginData.java
index 88da17183..6be84015e 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvoutput/CsvOutputPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/csvoutput/CsvOutputPluginData.java
@@ -18,12 +18,12 @@ package io.nosqlbench.engine.extensions.csvoutput;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value = ScriptingPluginInfo.class,selector = "csvoutput")
-public class CsvOutputPluginData implements ScriptingPluginInfo {
+@Service(value = ScriptingExtensionPluginInfo.class,selector = "csvoutput")
+public class CsvOutputPluginData implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePluginData.java
index afd863582..742f49cbb 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/example/ExamplePluginData.java
@@ -18,12 +18,12 @@ package io.nosqlbench.engine.extensions.example;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value = ScriptingPluginInfo.class, selector = "adder")
-public class ExamplePluginData implements ScriptingPluginInfo {
+@Service(value = ScriptingExtensionPluginInfo.class, selector = "adder")
+public class ExamplePluginData implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/files/FileAccessPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/files/FileAccessPluginData.java
index 7d3e9ae76..47d327885 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/files/FileAccessPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/files/FileAccessPluginData.java
@@ -18,12 +18,12 @@ package io.nosqlbench.engine.extensions.files;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value = ScriptingPluginInfo.class, selector = "files")
-public class FileAccessPluginData implements ScriptingPluginInfo {
+@Service(value = ScriptingExtensionPluginInfo.class, selector = "files")
+public class FileAccessPluginData implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingExtensionPluginData.java
similarity index 83%
rename from engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingPluginData.java
rename to engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingExtensionPluginData.java
index bdb8b5af0..f1d95cf9e 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/globalvars/GlobalVarsScriptingExtensionPluginData.java
@@ -18,15 +18,15 @@ package io.nosqlbench.engine.extensions.globalvars;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.virtdata.library.basics.core.threadstate.SharedState;
import org.apache.logging.log4j.Logger;
import java.util.concurrent.ConcurrentHashMap;
-@Service(value = ScriptingPluginInfo.class, selector = "globalvars")
-public class GlobalVarsScriptingPluginData implements ScriptingPluginInfo> {
+@Service(value = ScriptingExtensionPluginInfo.class, selector = "globalvars")
+public class GlobalVarsScriptingExtensionPluginData implements ScriptingExtensionPluginInfo> {
@Override
public String getDescription() {
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java
index 8116d85ca..4490db297 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histologger/HdrHistoLogPluginData.java
@@ -18,12 +18,12 @@ package io.nosqlbench.engine.extensions.histologger;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value = ScriptingPluginInfo.class, selector = "histologger")
-public class HdrHistoLogPluginData implements ScriptingPluginInfo {
+@Service(value = ScriptingExtensionPluginInfo.class, selector = "histologger")
+public class HdrHistoLogPluginData implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPluginData.java
index 7e5fafd69..358343716 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/histostatslogger/HistoStatsPluginData.java
@@ -18,12 +18,12 @@ package io.nosqlbench.engine.extensions.histostatslogger;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value = ScriptingPluginInfo.class, selector = "histostatslogger")
-public class HistoStatsPluginData implements ScriptingPluginInfo {
+@Service(value = ScriptingExtensionPluginInfo.class, selector = "histostatslogger")
+public class HistoStatsPluginData implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/http/HttpPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/http/HttpPluginData.java
index 9826b6ceb..e6677207a 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/http/HttpPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/http/HttpPluginData.java
@@ -18,12 +18,12 @@ package io.nosqlbench.engine.extensions.http;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value = ScriptingPluginInfo.class, selector = "http")
-public class HttpPluginData implements ScriptingPluginInfo {
+@Service(value = ScriptingExtensionPluginInfo.class, selector = "http")
+public class HttpPluginData implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPluginData.java
index 010acffc7..dc33a6cf9 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/optimizers/BobyqaOptimizerPluginData.java
@@ -18,12 +18,12 @@ package io.nosqlbench.engine.extensions.optimizers;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value = ScriptingPluginInfo.class, selector = "optimos")
-public class BobyqaOptimizerPluginData implements ScriptingPluginInfo {
+@Service(value = ScriptingExtensionPluginInfo.class, selector = "optimos")
+public class BobyqaOptimizerPluginData implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/s3uploader/S3UploaderPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/s3uploader/S3UploaderPluginData.java
index 2a7d9d65a..f17867b29 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/s3uploader/S3UploaderPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/s3uploader/S3UploaderPluginData.java
@@ -18,14 +18,14 @@ package io.nosqlbench.engine.extensions.s3uploader;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.api.metadata.ScenarioMetadata;
import io.nosqlbench.api.metadata.ScenarioMetadataAware;
import org.apache.logging.log4j.Logger;
-@Service(value = ScriptingPluginInfo.class, selector = "s3")
-public class S3UploaderPluginData implements ScriptingPluginInfo, ScenarioMetadataAware {
+@Service(value = ScriptingExtensionPluginInfo.class, selector = "s3")
+public class S3UploaderPluginData implements ScriptingExtensionPluginInfo, ScenarioMetadataAware {
private ScenarioMetadata scenarioMetadata;
@Override
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingGauge.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingGauge.java
index 5ed8638ea..607d46d76 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingGauge.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingGauge.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 nosqlbench
+ * Copyright (c) 2022-2023 nosqlbench
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,15 +20,12 @@ import com.codahale.metrics.Gauge;
public class ScriptingGauge implements Gauge {
private double value;
-
public ScriptingGauge(String name, double initialValue) {
value = initialValue;
}
-
public void update(double value) {
this.value = value;
}
-
@Override
public Double getValue() {
return value;
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetrics.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetrics.java
index f527b651e..1926b1a3a 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetrics.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetrics.java
@@ -18,7 +18,9 @@ package io.nosqlbench.engine.extensions.scriptingmetrics;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
+import io.nosqlbench.api.config.NBLabeledElement;
import io.nosqlbench.api.engine.metrics.ActivityMetrics;
+import io.nosqlbench.api.engine.metrics.DoubleSummaryGauge;
import org.apache.logging.log4j.Logger;
public class ScriptingMetrics {
@@ -27,17 +29,30 @@ public class ScriptingMetrics {
private final LabeledScenarioContext scriptContext;
public ScriptingMetrics(final Logger logger, final MetricRegistry metricRegistry, final LabeledScenarioContext scriptContext) {
-
this.logger = logger;
this.metricRegistry = metricRegistry;
this.scriptContext = scriptContext;
}
- public ScriptingGauge newGauge(final String name, final double initialValue) {
+ public ScriptingGauge newStaticGauge(final String name, final double initialValue) {
final ScriptingGauge scriptingGauge = new ScriptingGauge(name, initialValue);
ActivityMetrics.gauge(this.scriptContext,name, scriptingGauge);
this.logger.info(() -> "registered scripting gauge:" + name);
return scriptingGauge;
}
+ public DoubleSummaryGauge newSummaryGauge(final String name) {
+ final DoubleSummaryGauge summaryGauge = ActivityMetrics.summaryGauge(scriptContext,name);
+ this.logger.info(() -> "registered summmary gauge:" + name);
+ return summaryGauge;
+ }
+
+ public DoubleSummaryGauge newSummaryGauge(NBLabeledElement context, final String name) {
+ final DoubleSummaryGauge summaryGauge = ActivityMetrics.summaryGauge(context,name);
+ this.logger.info(() -> "registered summmary gauge:" + name);
+ return summaryGauge;
+ }
+
+
+
}
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetricsPluginData.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetricsPluginData.java
index adc7d8600..7fb050fa5 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetricsPluginData.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/scriptingmetrics/ScriptingMetricsPluginData.java
@@ -18,12 +18,12 @@ package io.nosqlbench.engine.extensions.scriptingmetrics;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value= ScriptingPluginInfo.class, selector="scriptingmetrics")
-public class ScriptingMetricsPluginData implements ScriptingPluginInfo {
+@Service(value= ScriptingExtensionPluginInfo.class, selector="scriptingmetrics")
+public class ScriptingMetricsPluginData implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/shutdown/ShutdownHookPluginMetadata.java b/engine-extensions/src/main/java/io/nosqlbench/engine/shutdown/ShutdownHookPluginMetadata.java
index 9d6ca92e7..29da6e174 100644
--- a/engine-extensions/src/main/java/io/nosqlbench/engine/shutdown/ShutdownHookPluginMetadata.java
+++ b/engine-extensions/src/main/java/io/nosqlbench/engine/shutdown/ShutdownHookPluginMetadata.java
@@ -18,12 +18,12 @@ package io.nosqlbench.engine.shutdown;
import com.codahale.metrics.MetricRegistry;
import io.nosqlbench.api.config.LabeledScenarioContext;
-import io.nosqlbench.api.extensions.ScriptingPluginInfo;
+import io.nosqlbench.api.extensions.ScriptingExtensionPluginInfo;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
-@Service(value=ScriptingPluginInfo.class,selector = "shutdown")
-public class ShutdownHookPluginMetadata implements ScriptingPluginInfo {
+@Service(value= ScriptingExtensionPluginInfo.class,selector = "shutdown")
+public class ShutdownHookPluginMetadata implements ScriptingExtensionPluginInfo {
@Override
public String getDescription() {
diff --git a/adapter-cqld4/src/test/java/io/nosqlbench/engine/extensions/vectormath/IntersectionsTest.java b/engine-extensions/src/test/java/io/nosqlbench/engine/extensions/computefunctions/IntersectionsTest.java
similarity index 96%
rename from adapter-cqld4/src/test/java/io/nosqlbench/engine/extensions/vectormath/IntersectionsTest.java
rename to engine-extensions/src/test/java/io/nosqlbench/engine/extensions/computefunctions/IntersectionsTest.java
index 2fc41d76b..d6545e0c4 100644
--- a/adapter-cqld4/src/test/java/io/nosqlbench/engine/extensions/vectormath/IntersectionsTest.java
+++ b/engine-extensions/src/test/java/io/nosqlbench/engine/extensions/computefunctions/IntersectionsTest.java
@@ -14,13 +14,15 @@
* limitations under the License.
*/
-package io.nosqlbench.engine.extensions.vectormath;
+package io.nosqlbench.engine.extensions.computefunctions;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
+
class IntersectionsTest {
+
@Test
public void testIntegerIntersection() {
int[] result = Intersections.find(new int[]{1,2,3,4,5},new int[]{4,5,6,7,8});
@@ -44,4 +46,5 @@ class IntersectionsTest {
assertThat(result).isEqualTo(3);
}
+
}
diff --git a/nb-api/src/main/java/io/nosqlbench/api/extensions/SandboxExtensionFinder.java b/nb-api/src/main/java/io/nosqlbench/api/extensions/SandboxExtensionFinder.java
index 913257042..8536f5978 100644
--- a/nb-api/src/main/java/io/nosqlbench/api/extensions/SandboxExtensionFinder.java
+++ b/nb-api/src/main/java/io/nosqlbench/api/extensions/SandboxExtensionFinder.java
@@ -23,14 +23,14 @@ import java.util.ServiceLoader;
public class SandboxExtensionFinder {
- private final static List> extensionDescriptors = new ArrayList<>();
+ private final static List> extensionDescriptors = new ArrayList<>();
- public static List> findAll() {
+ public static List> findAll() {
if (extensionDescriptors.isEmpty()) {
synchronized (SandboxExtensionFinder.class) {
if (extensionDescriptors.isEmpty()) {
- ServiceLoader loader =
- ServiceLoader.load(ScriptingPluginInfo.class);
+ ServiceLoader loader =
+ ServiceLoader.load(ScriptingExtensionPluginInfo.class);
loader.iterator().forEachRemaining(extensionDescriptors::add);
}
}
diff --git a/nb-api/src/main/java/io/nosqlbench/api/extensions/ScriptingPluginInfo.java b/nb-api/src/main/java/io/nosqlbench/api/extensions/ScriptingExtensionPluginInfo.java
similarity index 93%
rename from nb-api/src/main/java/io/nosqlbench/api/extensions/ScriptingPluginInfo.java
rename to nb-api/src/main/java/io/nosqlbench/api/extensions/ScriptingExtensionPluginInfo.java
index 842526576..8bfd9a11c 100644
--- a/nb-api/src/main/java/io/nosqlbench/api/extensions/ScriptingPluginInfo.java
+++ b/nb-api/src/main/java/io/nosqlbench/api/extensions/ScriptingExtensionPluginInfo.java
@@ -21,6 +21,8 @@ import io.nosqlbench.api.config.LabeledScenarioContext;
import io.nosqlbench.nb.annotations.Service;
import org.apache.logging.log4j.Logger;
+import java.util.List;
+
/**
* Any implementation of a SandboxExtension that is found in the runtime
* can be automatically loaded into the scenario scripting sandbox.
@@ -30,7 +32,7 @@ import org.apache.logging.log4j.Logger;
* Each scenario gets its own instance of an object from this SandboxPlugin
*
*/
-public interface ScriptingPluginInfo {
+public interface ScriptingExtensionPluginInfo {
/**
* @return a brief description of this extension.
@@ -61,4 +63,8 @@ public interface ScriptingPluginInfo {
default boolean isAutoLoading() {
return true;
}
+
+ default List> autoImportStaticMethodClasses() {
+ return List.of();
+ }
}