mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2025-02-25 18:55:28 -06:00
partial completion of named scenario overrides
This commit is contained in:
parent
73c3e713a6
commit
c3058bcb9c
@ -1,21 +1,13 @@
|
|||||||
package io.nosqlbench.engine.cli;
|
package io.nosqlbench.engine.cli;
|
||||||
|
|
||||||
import ch.qos.logback.classic.Level;
|
import ch.qos.logback.classic.Level;
|
||||||
import io.nosqlbench.engine.api.activityconfig.StatementsLoader;
|
|
||||||
import io.nosqlbench.engine.api.activityconfig.yaml.Scenarios;
|
|
||||||
import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList;
|
|
||||||
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
|
|
||||||
import io.nosqlbench.engine.api.activityimpl.ParameterMap;
|
|
||||||
import io.nosqlbench.engine.api.metrics.IndicatorMode;
|
import io.nosqlbench.engine.api.metrics.IndicatorMode;
|
||||||
import io.nosqlbench.engine.api.util.NosqlBenchFiles;
|
import io.nosqlbench.engine.api.util.NosqlBenchFiles;
|
||||||
import io.nosqlbench.engine.api.util.StrInterpolator;
|
|
||||||
import io.nosqlbench.engine.api.util.Unit;
|
import io.nosqlbench.engine.api.util.Unit;
|
||||||
import org.apache.commons.text.StrSubstitutor;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.security.InvalidParameterException;
|
import java.security.InvalidParameterException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -77,9 +69,9 @@ public class NBCLIOptions {
|
|||||||
|
|
||||||
private static final Set<String> reserved_words = new HashSet<String>() {{
|
private static final Set<String> reserved_words = new HashSet<String>() {{
|
||||||
addAll(
|
addAll(
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
ACTIVITY, SCRIPT, ACTIVITY_TYPES, HELP, METRICS_PREFIX, REPORT_GRAPHITE_TO
|
ACTIVITY, SCRIPT, ACTIVITY_TYPES, HELP, METRICS_PREFIX, REPORT_GRAPHITE_TO
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}};
|
}};
|
||||||
private static final String DEFAULT_CONSOLE_LOGGING_PATTERN = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n";
|
private static final String DEFAULT_CONSOLE_LOGGING_PATTERN = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n";
|
||||||
@ -105,13 +97,13 @@ public class NBCLIOptions {
|
|||||||
private List<String> classicHistoConfigs = new ArrayList<>();
|
private List<String> classicHistoConfigs = new ArrayList<>();
|
||||||
private String progressSpec = "console:1m";
|
private String progressSpec = "console:1m";
|
||||||
private String logsDirectory = "logs";
|
private String logsDirectory = "logs";
|
||||||
private boolean wantsInputTypes=false;
|
private boolean wantsInputTypes = false;
|
||||||
private boolean wantsMarkerTypes=false;
|
private boolean wantsMarkerTypes = false;
|
||||||
private String[] rleDumpOptions = new String[0];
|
private String[] rleDumpOptions = new String[0];
|
||||||
private String[] cyclelogImportOptions = new String[0];
|
private String[] cyclelogImportOptions = new String[0];
|
||||||
private String consoleLoggingPattern = DEFAULT_CONSOLE_LOGGING_PATTERN;
|
private String consoleLoggingPattern = DEFAULT_CONSOLE_LOGGING_PATTERN;
|
||||||
private String logsLevel = "INFO";
|
private String logsLevel = "INFO";
|
||||||
private Map<String,Level> logLevelsOverrides = new HashMap<>();
|
private Map<String, Level> logLevelsOverrides = new HashMap<>();
|
||||||
private boolean enableChart = false;
|
private boolean enableChart = false;
|
||||||
private boolean dockerMetrics = false;
|
private boolean dockerMetrics = false;
|
||||||
private boolean wantsWorkloads = false;
|
private boolean wantsWorkloads = false;
|
||||||
@ -198,7 +190,7 @@ public class NBCLIOptions {
|
|||||||
break;
|
break;
|
||||||
case LOGS_MAX:
|
case LOGS_MAX:
|
||||||
arglist.removeFirst();
|
arglist.removeFirst();
|
||||||
logsMax = Integer.valueOf(readWordOrThrow(arglist,"max logfiles to keep"));
|
logsMax = Integer.valueOf(readWordOrThrow(arglist, "max logfiles to keep"));
|
||||||
break;
|
break;
|
||||||
case LOGS_LEVEL:
|
case LOGS_LEVEL:
|
||||||
arglist.removeFirst();
|
arglist.removeFirst();
|
||||||
@ -237,7 +229,7 @@ public class NBCLIOptions {
|
|||||||
logger.info("getting basic help");
|
logger.info("getting basic help");
|
||||||
} else {
|
} else {
|
||||||
wantsActivityHelp = true;
|
wantsActivityHelp = true;
|
||||||
wantsActivityHelpFor = readWordOrThrow(arglist,"topic");
|
wantsActivityHelpFor = readWordOrThrow(arglist, "topic");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DUMP_CYCLELOG:
|
case DUMP_CYCLELOG:
|
||||||
@ -313,7 +305,7 @@ public class NBCLIOptions {
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Optional<InputStream> optionalScript =
|
Optional<InputStream> optionalScript =
|
||||||
NosqlBenchFiles.findOptionalStreamOrFile(word, "js", "scripts/auto");
|
NosqlBenchFiles.findOptionalStreamOrFile(word, "js", "scripts/auto");
|
||||||
//Script
|
//Script
|
||||||
if (optionalScript.isPresent()) {
|
if (optionalScript.isPresent()) {
|
||||||
arglist.removeFirst();
|
arglist.removeFirst();
|
||||||
@ -322,101 +314,25 @@ public class NBCLIOptions {
|
|||||||
Cmd script = parseScriptCmd(arglist);
|
Cmd script = parseScriptCmd(arglist);
|
||||||
cmdList.add(script);
|
cmdList.add(script);
|
||||||
//Scripted yaml
|
//Scripted yaml
|
||||||
|
} else if (NBCLIScenarioParser.isFoundWorkload(word)) {
|
||||||
|
NBCLIScenarioParser.parseScenarioCommand(arglist);
|
||||||
} else {
|
} else {
|
||||||
Optional<Path> path = NosqlBenchFiles.findOptionalPath(word, "yaml", "activities");
|
throw new InvalidParameterException("unrecognized option:" + word);
|
||||||
if(path.isPresent()){
|
|
||||||
arglist.removeFirst();
|
|
||||||
String scenarioFilter = null;
|
|
||||||
//Named scenario
|
|
||||||
if (arglist.size() > 0 && !arglist.peekFirst().contains("=")){
|
|
||||||
scenarioFilter = arglist.peekFirst();
|
|
||||||
arglist.removeFirst();
|
|
||||||
}
|
|
||||||
|
|
||||||
parseWorkloadYamlCmds(path.get().toString(), arglist, scenarioFilter);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new InvalidParameterException("unrecognized option:" + word);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void parseWorkloadYamlCmds(String yamlPath, LinkedList<String> arglist, String scenarioFilter) {
|
|
||||||
StmtsDocList stmts = StatementsLoader.load(logger, yamlPath);
|
|
||||||
|
|
||||||
Scenarios scenarios = stmts.getDocScenarios();
|
|
||||||
|
|
||||||
String scenarioName = "default";
|
|
||||||
if (scenarioFilter != null){
|
|
||||||
scenarioName = scenarioFilter;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> cmds = scenarios.getNamedScenario(scenarioName);
|
|
||||||
|
|
||||||
Map<String, String> paramMap = new HashMap<>();
|
|
||||||
while(arglist.size() > 0 && arglist.peekFirst().contains("=")){
|
|
||||||
String arg = arglist.removeFirst();
|
|
||||||
String oldArg = arg;
|
|
||||||
arg = Synonyms.canonicalize(arg, logger);
|
|
||||||
|
|
||||||
for(int i =0 ; i< cmds.size(); i++){
|
|
||||||
String yamlCmd = cmds.get(i);
|
|
||||||
String[] argArray = arg.split("=");
|
|
||||||
String argKey = argArray[0];
|
|
||||||
String argValue = argArray[1];
|
|
||||||
if (!yamlCmd.contains(argKey)) {
|
|
||||||
cmds.set(i, yamlCmd +" " + arg);
|
|
||||||
}else{
|
|
||||||
paramMap.put(argKey, argValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (cmds == null){
|
|
||||||
List<String> names = scenarios.getScenarioNames();
|
|
||||||
throw new RuntimeException("Unknown scenario name, make sure the scenario name you provide exists in the workload definition (yaml):\n" + String.join(",", names));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String cmd : cmds) {
|
|
||||||
String[] cmdArray = cmd.split(" ");
|
|
||||||
|
|
||||||
for (String parameter: cmdArray) {
|
|
||||||
if (parameter.contains("=")){
|
|
||||||
if ( !parameter.contains("TEMPLATE(") && !parameter.contains("<<")) {
|
|
||||||
String[] paramArray = parameter.split("=");
|
|
||||||
paramMap.put(paramArray[0], paramArray[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StrSubstitutor sub1 = new StrSubstitutor(paramMap, "<<", ">>", '\\', ",");
|
|
||||||
StrSubstitutor sub2 = new StrSubstitutor(paramMap, "TEMPLATE(", ")", '\\', ",");
|
|
||||||
|
|
||||||
cmd = sub2.replace(sub1.replace(cmd));
|
|
||||||
|
|
||||||
if (cmd.contains("yaml=") || cmd.contains("workload=")){
|
|
||||||
parse(cmd.split(" "));
|
|
||||||
}else{
|
|
||||||
parse((cmd + " workload="+yamlPath).split(" "));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is there a better way to do this than regex?
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Map<String, Level> parseLogLevelOverrides(String levelsSpec) {
|
private Map<String, Level> parseLogLevelOverrides(String levelsSpec) {
|
||||||
Map<String,Level> levels = new HashMap<>();
|
Map<String, Level> levels = new HashMap<>();
|
||||||
Arrays.stream(levelsSpec.split("[,;]")).forEach(kp -> {
|
Arrays.stream(levelsSpec.split("[,;]")).forEach(kp -> {
|
||||||
String[] ll = kp.split(":");
|
String[] ll = kp.split(":");
|
||||||
if (ll.length!=2) {
|
if (ll.length != 2) {
|
||||||
throw new RuntimeException("Log level must have name:level format");
|
throw new RuntimeException("Log level must have name:level format");
|
||||||
}
|
}
|
||||||
levels.put(ll[0],Level.toLevel(ll[1]));
|
levels.put(ll[0], Level.toLevel(ll[1]));
|
||||||
});
|
});
|
||||||
return levels;
|
return levels;
|
||||||
}
|
}
|
||||||
@ -549,7 +465,7 @@ public class NBCLIOptions {
|
|||||||
private Cmd parseFragmentCmd(LinkedList<String> arglist) {
|
private Cmd parseFragmentCmd(LinkedList<String> arglist) {
|
||||||
String cmdType = arglist.removeFirst();
|
String cmdType = arglist.removeFirst();
|
||||||
String scriptFragment = arglist.removeFirst();
|
String scriptFragment = arglist.removeFirst();
|
||||||
return new Cmd(CmdType.valueOf(cmdType),scriptFragment);
|
return new Cmd(CmdType.valueOf(cmdType), scriptFragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Cmd parseActivityCmd(LinkedList<String> arglist) {
|
private Cmd parseActivityCmd(LinkedList<String> arglist) {
|
||||||
@ -609,15 +525,17 @@ public class NBCLIOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean wantsToDumpCyclelog() {
|
public boolean wantsToDumpCyclelog() {
|
||||||
return rleDumpOptions.length>0;
|
return rleDumpOptions.length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean wantsToImportCycleLog() {
|
public boolean wantsToImportCycleLog() {
|
||||||
return cyclelogImportOptions.length>0;
|
return cyclelogImportOptions.length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] getCyclelogImportOptions() {
|
public String[] getCyclelogImportOptions() {
|
||||||
return cyclelogImportOptions;
|
return cyclelogImportOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] getCycleLogExporterOptions() {
|
public String[] getCycleLogExporterOptions() {
|
||||||
return rleDumpOptions;
|
return rleDumpOptions;
|
||||||
}
|
}
|
||||||
@ -632,7 +550,7 @@ public class NBCLIOptions {
|
|||||||
|
|
||||||
public void setHistoLoggerConfigs(String pattern, String file, String interval) {
|
public void setHistoLoggerConfigs(String pattern, String file, String interval) {
|
||||||
//--log-histograms 'hdrdata.log:.*:2m'
|
//--log-histograms 'hdrdata.log:.*:2m'
|
||||||
histoLoggerConfigs.add(String.format("%s:%s:%s",file,pattern,interval));
|
histoLoggerConfigs.add(String.format("%s:%s:%s", file, pattern, interval));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean wantsWorkloads() {
|
public boolean wantsWorkloads() {
|
||||||
@ -669,10 +587,10 @@ public class NBCLIOptions {
|
|||||||
public String getCmdSpec() {
|
public String getCmdSpec() {
|
||||||
|
|
||||||
if (cmdSpec.startsWith("'") && cmdSpec.endsWith("'")) {
|
if (cmdSpec.startsWith("'") && cmdSpec.endsWith("'")) {
|
||||||
return cmdSpec.substring(1,cmdSpec.length()-1);
|
return cmdSpec.substring(1, cmdSpec.length() - 1);
|
||||||
}
|
}
|
||||||
if (cmdSpec.startsWith("\"") && cmdSpec.endsWith("\"")) {
|
if (cmdSpec.startsWith("\"") && cmdSpec.endsWith("\"")) {
|
||||||
return cmdSpec.substring(1,cmdSpec.length()-1);
|
return cmdSpec.substring(1, cmdSpec.length() - 1);
|
||||||
}
|
}
|
||||||
return cmdSpec;
|
return cmdSpec;
|
||||||
}
|
}
|
||||||
@ -729,8 +647,9 @@ public class NBCLIOptions {
|
|||||||
private static class ProgressSpec {
|
private static class ProgressSpec {
|
||||||
public String intervalSpec;
|
public String intervalSpec;
|
||||||
public IndicatorMode indicatorMode;
|
public IndicatorMode indicatorMode;
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return indicatorMode.toString()+":" + intervalSpec;
|
return indicatorMode.toString() + ":" + intervalSpec;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -753,5 +672,4 @@ public class NBCLIOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,200 @@
|
|||||||
|
package io.nosqlbench.engine.cli;
|
||||||
|
|
||||||
|
import io.nosqlbench.engine.api.activityconfig.StatementsLoader;
|
||||||
|
import io.nosqlbench.engine.api.activityconfig.yaml.Scenarios;
|
||||||
|
import io.nosqlbench.engine.api.activityconfig.yaml.StmtsDocList;
|
||||||
|
import io.nosqlbench.engine.api.exceptions.BasicError;
|
||||||
|
import io.nosqlbench.engine.api.util.NosqlBenchFiles;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class NBCLIScenarioParser {
|
||||||
|
private final static Logger logger = LoggerFactory.getLogger(NBCLIScenarioParser.class);
|
||||||
|
|
||||||
|
public static boolean isFoundWorkload(String word) {
|
||||||
|
Optional<Path> workloadPath = NosqlBenchFiles.findOptionalPath(word, "yaml", "activities");
|
||||||
|
return workloadPath.isPresent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void parseScenarioCommand(LinkedList<String> arglist) {
|
||||||
|
String workloadName = arglist.removeFirst();
|
||||||
|
Optional<Path> workloadPathSearch = NosqlBenchFiles.findOptionalPath(workloadName, "yaml", "activities");
|
||||||
|
Path workloadPath = workloadPathSearch.orElseThrow();
|
||||||
|
|
||||||
|
String scenarioName = (arglist.size()>0 && !arglist.peekFirst().contains("=")) ? arglist.removeFirst() : "default";
|
||||||
|
|
||||||
|
// Load in user's CLI options
|
||||||
|
LinkedHashMap<String,String> userCli = new LinkedHashMap<>();
|
||||||
|
while (arglist.size()>0 && arglist.peekFirst().contains("=")) {
|
||||||
|
String[] arg = arglist.removeFirst().split("=");
|
||||||
|
arg[0] = Synonyms.canonicalize(arg[0], logger);
|
||||||
|
if (userCli.containsKey(arg[0])) {
|
||||||
|
throw new BasicError("duplicate occurence of option on command line: " + arg[0]);
|
||||||
|
}
|
||||||
|
userCli.put(arg[0],arg[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load in named scenario
|
||||||
|
StmtsDocList stmts = StatementsLoader.load(logger, workloadPath.toString());
|
||||||
|
Scenarios scenarios = stmts.getDocScenarios();
|
||||||
|
List<String> cmds = scenarios.getNamedScenario(scenarioName);
|
||||||
|
if (cmds==null) {
|
||||||
|
throw new BasicError("Unable to find named scenario '" + scenarioName + "' in workload '" + workloadName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This will hold the command to be prepended to the main arglist
|
||||||
|
LinkedList<String> buildCmdBuffer = new LinkedList<>();
|
||||||
|
|
||||||
|
Pattern cmdpattern = Pattern.compile("(?<name>\\w+)((?<oper>==|:=|=:|=)(?<val>.+))?");
|
||||||
|
for (String cmd : cmds) { // each command line of the named scenario
|
||||||
|
LinkedHashMap<String,String> usersCopy = new LinkedHashMap<>(userCli);
|
||||||
|
LinkedHashMap<String,CmdArg> cmdline = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
String[] cmdparts = cmd.split(" ");
|
||||||
|
for (String cmdpart : cmdparts) {
|
||||||
|
Matcher matcher = cmdpattern.matcher(cmdpart);
|
||||||
|
if (!matcher.matches()) {
|
||||||
|
throw new BasicError("Unable to recognize scenario cmd spec in '" + cmdpart + "'");
|
||||||
|
}
|
||||||
|
String name = Synonyms.canonicalize(matcher.group("name"),logger);
|
||||||
|
String oper = matcher.group("oper");
|
||||||
|
String val = matcher.group("val");
|
||||||
|
cmdline.put(name,new CmdArg(name,oper,val));
|
||||||
|
}
|
||||||
|
|
||||||
|
LinkedHashMap<String,String> builtcmd = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
for (CmdArg cmdarg : cmdline.values()) {
|
||||||
|
if (usersCopy.containsKey(cmdarg.getName())) {
|
||||||
|
cmdarg = cmdarg.override(usersCopy.remove(cmdarg.getName()));
|
||||||
|
}
|
||||||
|
builtcmd.put(cmdarg.getName(),cmdarg.toString());
|
||||||
|
}
|
||||||
|
usersCopy.forEach((k,v)-> builtcmd.put(k,k+"="+v));
|
||||||
|
if (!builtcmd.containsKey("workload")) {
|
||||||
|
builtcmd.put("workload", "workload="+workloadPath.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("Named scenario built command: " + String.join(" ",builtcmd.values()));
|
||||||
|
buildCmdBuffer.addAll(builtcmd.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
buildCmdBuffer.descendingIterator().forEachRemaining(arglist::addFirst);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private final static class CmdArg {
|
||||||
|
private final String name;
|
||||||
|
private final String operator;
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
public CmdArg(String name, String operator, String value) {
|
||||||
|
|
||||||
|
this.name = name;
|
||||||
|
this.operator = operator;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isReassignable() {
|
||||||
|
return "=".equals(operator);
|
||||||
|
}
|
||||||
|
public boolean isFinalVerbose() {
|
||||||
|
return "==".equals(operator);
|
||||||
|
}
|
||||||
|
public boolean isFinalSilent() {
|
||||||
|
return ":=".equals(operator) || "=:".equals(operator);
|
||||||
|
}
|
||||||
|
public CmdArg override(String value) {
|
||||||
|
if (isReassignable()) {
|
||||||
|
return new CmdArg(this.name, this.operator, value);
|
||||||
|
} else if (isFinalSilent()) {
|
||||||
|
return this;
|
||||||
|
} else if (isFinalVerbose()) {
|
||||||
|
throw new BasicError("Unable to reassign value for named scenario: '" + value + "'");
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("impossible!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return name + (operator!=null ? "=" : "") + (value!=null ? value : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// private static void parseWorkloadYamlCmds(String yamlPath, LinkedList<String> arglist, String scenarioName) {
|
||||||
|
// StmtsDocList stmts = StatementsLoader.load(logger, yamlPath);
|
||||||
|
//
|
||||||
|
// Scenarios scenarios = stmts.getDocScenarios();
|
||||||
|
//
|
||||||
|
// String scenarioName = "default";
|
||||||
|
// if (scenarioName != null) {
|
||||||
|
// scenarioName = scenarioName;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// List<String> cmds = scenarios.getNamedScenario(scenarioName);
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Map<String, String> paramMap = new HashMap<>();
|
||||||
|
// while (arglist.size() > 0 && arglist.peekFirst().contains("=")) {
|
||||||
|
// String arg = arglist.removeFirst();
|
||||||
|
// String oldArg = arg;
|
||||||
|
// arg = Synonyms.canonicalize(arg, logger);
|
||||||
|
//
|
||||||
|
// for (int i = 0; i < cmds.size(); i++) {
|
||||||
|
// String yamlCmd = cmds.get(i);
|
||||||
|
// String[] argArray = arg.split("=");
|
||||||
|
// String argKey = argArray[0];
|
||||||
|
// String argValue = argArray[1];
|
||||||
|
// if (!yamlCmd.contains(argKey)) {
|
||||||
|
// cmds.set(i, yamlCmd + " " + arg);
|
||||||
|
// } else {
|
||||||
|
// paramMap.put(argKey, argValue);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// if (cmds == null) {
|
||||||
|
// List<String> names = scenarios.getScenarioNames();
|
||||||
|
// throw new RuntimeException("Unknown scenario name, make sure the scenario name you provide exists in the workload definition (yaml):\n" + String.join(",", names));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for (String cmd : cmds) {
|
||||||
|
// String[] cmdArray = cmd.split(" ");
|
||||||
|
//
|
||||||
|
// for (String parameter : cmdArray) {
|
||||||
|
// if (parameter.contains("=")) {
|
||||||
|
// if (!parameter.contains("TEMPLATE(") && !parameter.contains("<<")) {
|
||||||
|
// String[] paramArray = parameter.split("=");
|
||||||
|
// paramMap.put(paramArray[0], paramArray[1]);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// StrSubstitutor sub1 = new StrSubstitutor(paramMap, "<<", ">>", '\\', ",");
|
||||||
|
// StrSubstitutor sub2 = new StrSubstitutor(paramMap, "TEMPLATE(", ")", '\\', ",");
|
||||||
|
//
|
||||||
|
// cmd = sub2.replace(sub1.replace(cmd));
|
||||||
|
//
|
||||||
|
// if (cmd.contains("yaml=") || cmd.contains("workload=")) {
|
||||||
|
// parse(cmd.split(" "));
|
||||||
|
// } else {
|
||||||
|
// parse((cmd + " workload=" + yamlPath).split(" "));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Is there a better way to do this than regex?
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
package io.nosqlbench.engine.cli;
|
||||||
|
|
||||||
|
import io.nosqlbench.engine.api.exceptions.BasicError;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
public class NBCLIScenarioParserTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void providePathForScenario() {
|
||||||
|
NBCLIOptions opts = new NBCLIOptions(new String[]{ "local/example-scenarios" });
|
||||||
|
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void defaultScenario() {
|
||||||
|
NBCLIOptions opts = new NBCLIOptions(new String[]{ "scenario-test" });
|
||||||
|
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void defaultScenarioWithParams() {
|
||||||
|
NBCLIOptions opts = new NBCLIOptions(new String[]{ "scenario-test", "cycles=100"});
|
||||||
|
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
||||||
|
assertThat(cmds.get(0).getCmdSpec()).containsOnlyOnce("cycles=100");
|
||||||
|
assertThat(cmds.get(0).getCmdSpec()).containsOnlyOnce("cycles=");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void namedScenario() {
|
||||||
|
NBCLIOptions opts = new NBCLIOptions(new String[]{ "scenario-test", "schema-only"});
|
||||||
|
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void namedScenarioWithParams() {
|
||||||
|
NBCLIOptions opts = new NBCLIOptions(new String[]{ "scenario-test", "schema-only", "cycles=100"});
|
||||||
|
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
||||||
|
assertThat(cmds.get(0).getCmdSpec()).containsOnlyOnce("cycles=100");
|
||||||
|
assertThat(cmds.get(0).getCmdSpec()).containsOnlyOnce("cycles=");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testThatSilentFinalParametersPersist() {
|
||||||
|
NBCLIOptions opts = new NBCLIOptions(new String[]{ "scenario-test", "type=foo"});
|
||||||
|
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
||||||
|
assertThat(cmds.get(0).getCmdSpec()).containsOnlyOnce("driver=stdout");
|
||||||
|
assertThat(cmds.get(1).getCmdSpec()).containsOnlyOnce("driver=foo");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = BasicError.class)
|
||||||
|
public void testThatVerboseFinalParameterThrowsError() {
|
||||||
|
NBCLIOptions opts = new NBCLIOptions(new String[]{ "scenario-test", "yaml=canttouchthis"});
|
||||||
|
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = BasicError.class)
|
||||||
|
public void testThatMissingScenarioNameThrowsError() {
|
||||||
|
NBCLIOptions opts = new NBCLIOptions(new String[]{ "scenario-test", "missing-scenario"});
|
||||||
|
}
|
||||||
|
}
|
@ -193,39 +193,6 @@ public class TestNBCLIOptions {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void providePathForScenario() {
|
|
||||||
NBCLIOptions opts = new NBCLIOptions(new String[]{ "local/example-scenarios" });
|
|
||||||
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void defaultScenario() {
|
|
||||||
NBCLIOptions opts = new NBCLIOptions(new String[]{ "scenario-test" });
|
|
||||||
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void defaultScenarioWithParams() {
|
|
||||||
NBCLIOptions opts = new NBCLIOptions(new String[]{ "scenario-test", "cycles=100"});
|
|
||||||
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
|
||||||
assertThat(cmds.get(0).getCmdSpec()).containsOnlyOnce("cycles=100");
|
|
||||||
assertThat(cmds.get(0).getCmdSpec()).containsOnlyOnce("cycles=");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void namedScenario() {
|
|
||||||
NBCLIOptions opts = new NBCLIOptions(new String[]{ "scenario-test", "schema-only"});
|
|
||||||
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void namedScenarioWithParams() {
|
|
||||||
NBCLIOptions opts = new NBCLIOptions(new String[]{ "scenario-test", "schema-only", "cycles=100"});
|
|
||||||
List<NBCLIOptions.Cmd> cmds = opts.getCommands();
|
|
||||||
assertThat(cmds.get(0).getCmdSpec()).containsOnlyOnce("cycles=100");
|
|
||||||
assertThat(cmds.get(0).getCmdSpec()).containsOnlyOnce("cycles=");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void listWorkloads() {
|
public void listWorkloads() {
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# nb -v run type=cql yaml=cql-iot tags=phase:schema host=dsehost
|
# nb -v run type=cql yaml=cql-iot tags=phase:schema host=dsehost
|
||||||
scenarios:
|
scenarios:
|
||||||
default:
|
default:
|
||||||
- run type=stdout yaml=scenario-test tags=phase:schema
|
- run type=:stdout yaml==scenario-test tags=phase:schema
|
||||||
- run type=stdout yaml=scenario-test tags=phase:rampup cycles=TEMPLATE(cycles,10)
|
- "run type=stdout yaml==scenario-test tags=phase:rampup cycles=TEMPLATE(cycles,10)"
|
||||||
- run type=stdout yaml=scenario-test tags=phase:main cycles=TEMPLATE(cycles,10)
|
- "run type=stdout yaml==scenario-test tags=phase:main cycles=TEMPLATE(cycles,10)"
|
||||||
schema-only:
|
schema-only:
|
||||||
- run type=stdout yaml=scenario-test tags=phase:schema
|
- "run type=stdout yaml=scenario-test tags=phase:schema"
|
||||||
blocks:
|
blocks:
|
||||||
- tags:
|
- tags:
|
||||||
phase: schema
|
phase: schema
|
||||||
|
Loading…
Reference in New Issue
Block a user