Merge branch 'issue-67'

This commit is contained in:
Jonathan Shook 2020-03-17 14:32:08 -05:00
commit 659921df9b
19 changed files with 238 additions and 149 deletions

View File

@ -38,7 +38,7 @@ import io.nosqlbench.engine.api.metrics.ActivityMetrics;
import io.nosqlbench.engine.api.metrics.ExceptionCountMetrics;
import io.nosqlbench.engine.api.metrics.ExceptionHistoMetrics;
import io.nosqlbench.engine.api.util.SimpleConfig;
import io.nosqlbench.engine.api.util.StrInterpolater;
import io.nosqlbench.engine.api.util.StrInterpolator;
import io.nosqlbench.engine.api.util.TagFilter;
import io.nosqlbench.engine.api.util.Unit;
import org.slf4j.Logger;
@ -276,7 +276,7 @@ public class CqlActivity extends SimpleActivity implements Activity, ActivityDef
StmtsDocList doclist = null;
String yaml_loc = activityDef.getParams().getOptionalString("yaml").orElse("default");
StrInterpolater interp = new StrInterpolater(activityDef);
StrInterpolator interp = new StrInterpolator(activityDef);
String yamlVersion = "unset";
if (yaml_loc.endsWith(":1") || yaml_loc.endsWith(":2")) {
@ -329,7 +329,7 @@ public class CqlActivity extends SimpleActivity implements Activity, ActivityDef
}
@Deprecated
private StmtsDocList getVersion1StmtsDoc(StrInterpolater interp, String yaml_loc) {
private StmtsDocList getVersion1StmtsDoc(StrInterpolator interp, String yaml_loc) {
StmtsDocList unfiltered;
List<RawStmtsBlock> blocks = new ArrayList<>();

View File

@ -1,4 +1,13 @@
# nb -v run type=cql yaml=baselines/cql-iot tags=phase:schema host=dsehost
scenarios:
default:
- run type=cql yaml=baselines/cql-iot tags=phase:schema hosts=TEMPLATE(hosts,localhost)
- run type=cql yaml=baselines/cql-iot tags=phase:rampup cycles=TEMPLATE(cycles,10000000) hosts=TEMPLATE(hosts,localhost)
- run type=cql yaml=baselines/cql-iot tags=phase:main cycles=TEMPLATE(cycles,10000000) hosts=TEMPLATE(hosts,localhost)
stdout:
- run type=cql yaml=baselines/cql-iot tags=phase:schema hosts=TEMPLATE(hosts,localhost)
- run type=cql yaml=baselines/cql-iot tags=phase:rampup cycles=TEMPLATE(cycles,10000000) hosts=TEMPLATE(hosts,localhost)
- run type=cql yaml=baselines/cql-iot tags=phase:main cycles=TEMPLATE(cycles,10000000) hosts=TEMPLATE(hosts,localhost)
bindings:
machine_id: Mod(<<sources:10000>>); ToHashedUUID() -> java.util.UUID
sensor_name: HashedLineToString('data/variable_words.txt')

View File

@ -32,7 +32,7 @@ import io.nosqlbench.engine.api.activityimpl.ParameterMap;
import io.nosqlbench.engine.api.activityimpl.SimpleActivity;
import io.nosqlbench.engine.api.metrics.ActivityMetrics;
import io.nosqlbench.engine.api.metrics.ExceptionMeterMetrics;
import io.nosqlbench.engine.api.util.StrInterpolater;
import io.nosqlbench.engine.api.util.StrInterpolator;
import io.nosqlbench.virtdata.api.BindingsTemplate;
import io.nosqlbench.virtdata.api.templates.StringBindings;
import io.nosqlbench.virtdata.api.templates.StringBindingsTemplate;
@ -71,7 +71,7 @@ public class StdoutActivity extends SimpleActivity implements ActivityDefObserve
public StdoutActivity(ActivityDef activityDef) {
super(activityDef);
StrInterpolater interp = new StrInterpolater(activityDef);
StrInterpolator interp = new StrInterpolator(activityDef);
String yaml_loc = activityDef.getParams().getOptionalString("yaml").orElse("default");
this.showstmts = activityDef.getParams().getOptionalBoolean("showstatements").orElse(false);
this.fileName = activityDef.getParams().getOptionalString("filename").orElse("stdout");

View File

@ -9299,8 +9299,7 @@
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"optional": true
"bundled": true
},
"aproba": {
"version": "1.2.0",
@ -9318,15 +9317,13 @@
},
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"optional": true
"bundled": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
@ -9337,18 +9334,15 @@
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"optional": true
"bundled": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"optional": true
"bundled": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"optional": true
"bundled": true
},
"core-util-is": {
"version": "1.0.2",
@ -9360,7 +9354,7 @@
"bundled": true,
"optional": true,
"requires": {
"ms": "^2.1.1"
"ms": "2.1.2"
}
},
"deep-extend": {
@ -9429,7 +9423,7 @@
"bundled": true,
"optional": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
"safer-buffer": "2.1.2"
}
},
"ignore-walk": {
@ -9437,7 +9431,7 @@
"bundled": true,
"optional": true,
"requires": {
"minimatch": "^3.0.4"
"minimatch": "3.0.4"
}
},
"inflight": {
@ -9451,8 +9445,7 @@
},
"inherits": {
"version": "2.0.4",
"bundled": true,
"optional": true
"bundled": true
},
"ini": {
"version": "1.3.5",
@ -9462,9 +9455,8 @@
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
"number-is-nan": "1.0.1"
}
},
"isarray": {
@ -9475,15 +9467,13 @@
"minimatch": {
"version": "3.0.4",
"bundled": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
"brace-expansion": "1.1.11"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
"optional": true
"bundled": true
},
"minipass": {
"version": "2.9.0",
@ -9505,7 +9495,6 @@
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
@ -9520,9 +9509,9 @@
"bundled": true,
"optional": true,
"requires": {
"debug": "^3.2.6",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
"debug": "3.2.6",
"iconv-lite": "0.4.24",
"sax": "1.2.4"
}
},
"node-pre-gyp": {
@ -9547,8 +9536,8 @@
"bundled": true,
"optional": true,
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
"abbrev": "1.1.1",
"osenv": "0.1.5"
}
},
"npm-bundled": {
@ -9556,7 +9545,7 @@
"bundled": true,
"optional": true,
"requires": {
"npm-normalize-package-bin": "^1.0.1"
"npm-normalize-package-bin": "1.0.1"
}
},
"npm-normalize-package-bin": {
@ -9569,8 +9558,8 @@
"bundled": true,
"optional": true,
"requires": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1"
"ignore-walk": "3.0.3",
"npm-bundled": "1.1.1"
}
},
"npmlog": {
@ -9586,8 +9575,7 @@
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"optional": true
"bundled": true
},
"object-assign": {
"version": "4.1.1",
@ -9617,8 +9605,8 @@
"bundled": true,
"optional": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
"os-homedir": "1.0.2",
"os-tmpdir": "1.0.2"
}
},
"path-is-absolute": {
@ -9673,8 +9661,7 @@
},
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"optional": true
"bundled": true
},
"safer-buffer": {
"version": "2.1.2",
@ -9716,7 +9703,7 @@
"bundled": true,
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
"safe-buffer": "5.1.2"
}
},
"strip-ansi": {

View File

@ -1,9 +1,9 @@
<!doctype html>
<html>
<head>
<title>guidebookNoSQLBench Docs</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content="Docs App for NoSQLBench"><link data-n-head="1" rel="icon" type="image/x-icon" href="/favicon.ico"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900&display=swap"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link rel="preload" href="/_nuxt/53667d09397c029ad15e.js" as="script"><link rel="preload" href="/_nuxt/ba3d87d913919f4a90b7.js" as="script"><link rel="preload" href="/_nuxt/b731eebc22dad37c5c4f.js" as="script"><link rel="preload" href="/_nuxt/7dd5646c91bbd00029e3.js" as="script">
<title>guidebooknosqlbench docs</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content="Docs App for NoSQLBench"><link data-n-head="1" rel="icon" type="image/x-icon" href="/favicon.ico"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900&display=swap"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link rel="preload" href="/_nuxt/12b20e993eb36c6931cf.js" as="script"><link rel="preload" href="/_nuxt/ba3d87d913919f4a90b7.js" as="script"><link rel="preload" href="/_nuxt/b731eebc22dad37c5c4f.js" as="script"><link rel="preload" href="/_nuxt/c06b6bd74999b5452452.js" as="script">
</head>
<body>
<div id="__nuxt"><style>#nuxt-loading{visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #fff;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style><script>window.addEventListener("error",function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")})</script><div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div></div>
<script type="text/javascript" src="/_nuxt/53667d09397c029ad15e.js"></script><script type="text/javascript" src="/_nuxt/ba3d87d913919f4a90b7.js"></script><script type="text/javascript" src="/_nuxt/b731eebc22dad37c5c4f.js"></script><script type="text/javascript" src="/_nuxt/7dd5646c91bbd00029e3.js"></script></body>
<script type="text/javascript" src="/_nuxt/12b20e993eb36c6931cf.js"></script><script type="text/javascript" src="/_nuxt/ba3d87d913919f4a90b7.js"></script><script type="text/javascript" src="/_nuxt/b731eebc22dad37c5c4f.js"></script><script type="text/javascript" src="/_nuxt/c06b6bd74999b5452452.js"></script></body>
</html>

View File

@ -1 +1 @@
!function(e){function r(data){for(var r,n,f=data[0],l=data[1],d=data[2],i=0,h=[];i<f.length;i++)n=f[i],Object.prototype.hasOwnProperty.call(o,n)&&o[n]&&h.push(o[n][0]),o[n]=0;for(r in l)Object.prototype.hasOwnProperty.call(l,r)&&(e[r]=l[r]);for(v&&v(data);h.length;)h.shift()();return c.push.apply(c,d||[]),t()}function t(){for(var e,i=0;i<c.length;i++){for(var r=c[i],t=!0,n=1;n<r.length;n++){var l=r[n];0!==o[l]&&(t=!1)}t&&(c.splice(i--,1),e=f(f.s=r[0]))}return e}var n={},o={8:0},c=[];function f(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,f),t.l=!0,t.exports}f.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var c,script=document.createElement("script");script.charset="utf-8",script.timeout=120,f.nc&&script.setAttribute("nonce",f.nc),script.src=function(e){return f.p+""+{0:"55bb9a1be83797eee63f",1:"b8a47e05eded23bac7ed",4:"b3e025f0863187be1b03",5:"d367b2f4f2ccc5cdcc57",6:"428c6c33fdbc344a773a",7:"ecd4a42f2cc80fb75abd"}[e]+".js"}(e);var l=new Error;c=function(r){script.onerror=script.onload=null,clearTimeout(d);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),c=r&&r.target&&r.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+c+")",l.name="ChunkLoadError",l.type=n,l.request=c,t[1](l)}o[e]=void 0}};var d=setTimeout((function(){c({type:"timeout",target:script})}),12e4);script.onerror=script.onload=c,document.head.appendChild(script)}return Promise.all(r)},f.m=e,f.c=n,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,r){if(1&r&&(e=f(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)f.d(t,n,function(r){return e[r]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(object,e){return Object.prototype.hasOwnProperty.call(object,e)},f.p="/_nuxt/",f.oe=function(e){throw console.error(e),e};var l=window.webpackJsonp=window.webpackJsonp||[],d=l.push.bind(l);l.push=r,l=l.slice();for(var i=0;i<l.length;i++)r(l[i]);var v=d;t()}([]);
!function(e){function r(data){for(var r,n,f=data[0],l=data[1],d=data[2],i=0,h=[];i<f.length;i++)n=f[i],Object.prototype.hasOwnProperty.call(o,n)&&o[n]&&h.push(o[n][0]),o[n]=0;for(r in l)Object.prototype.hasOwnProperty.call(l,r)&&(e[r]=l[r]);for(v&&v(data);h.length;)h.shift()();return c.push.apply(c,d||[]),t()}function t(){for(var e,i=0;i<c.length;i++){for(var r=c[i],t=!0,n=1;n<r.length;n++){var l=r[n];0!==o[l]&&(t=!1)}t&&(c.splice(i--,1),e=f(f.s=r[0]))}return e}var n={},o={8:0},c=[];function f(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,f),t.l=!0,t.exports}f.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var c,script=document.createElement("script");script.charset="utf-8",script.timeout=120,f.nc&&script.setAttribute("nonce",f.nc),script.src=function(e){return f.p+""+{0:"55bb9a1be83797eee63f",1:"b8a47e05eded23bac7ed",4:"a2beba7c0d21de5af2f7",5:"3fc8daf49bf0ed8c9dfd",6:"428c6c33fdbc344a773a",7:"59759ea4aa8651f70220"}[e]+".js"}(e);var l=new Error;c=function(r){script.onerror=script.onload=null,clearTimeout(d);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),c=r&&r.target&&r.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+c+")",l.name="ChunkLoadError",l.type=n,l.request=c,t[1](l)}o[e]=void 0}};var d=setTimeout((function(){c({type:"timeout",target:script})}),12e4);script.onerror=script.onload=c,document.head.appendChild(script)}return Promise.all(r)},f.m=e,f.c=n,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,r){if(1&r&&(e=f(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)f.d(t,n,function(r){return e[r]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(object,e){return Object.prototype.hasOwnProperty.call(object,e)},f.p="/_nuxt/",f.oe=function(e){throw console.error(e),e};var l=window.webpackJsonp=window.webpackJsonp||[],d=l.push.bind(l);l.push=r,l=l.slice();for(var i=0;i<l.length;i++)r(l[i]);var v=d;t()}([]);

View File

@ -1,9 +1,9 @@
<!doctype html>
<html>
<head>
<title>guidebookNoSQLBench Docs</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content="Docs App for NoSQLBench"><link data-n-head="1" rel="icon" type="image/x-icon" href="/favicon.ico"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900&display=swap"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link rel="preload" href="/_nuxt/53667d09397c029ad15e.js" as="script"><link rel="preload" href="/_nuxt/ba3d87d913919f4a90b7.js" as="script"><link rel="preload" href="/_nuxt/b731eebc22dad37c5c4f.js" as="script"><link rel="preload" href="/_nuxt/7dd5646c91bbd00029e3.js" as="script">
<title>guidebooknosqlbench docs</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content="Docs App for NoSQLBench"><link data-n-head="1" rel="icon" type="image/x-icon" href="/favicon.ico"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900&display=swap"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link rel="preload" href="/_nuxt/12b20e993eb36c6931cf.js" as="script"><link rel="preload" href="/_nuxt/ba3d87d913919f4a90b7.js" as="script"><link rel="preload" href="/_nuxt/b731eebc22dad37c5c4f.js" as="script"><link rel="preload" href="/_nuxt/c06b6bd74999b5452452.js" as="script">
</head>
<body>
<div id="__nuxt"><style>#nuxt-loading{visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #fff;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style><script>window.addEventListener("error",function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")})</script><div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div></div>
<script type="text/javascript" src="/_nuxt/53667d09397c029ad15e.js"></script><script type="text/javascript" src="/_nuxt/ba3d87d913919f4a90b7.js"></script><script type="text/javascript" src="/_nuxt/b731eebc22dad37c5c4f.js"></script><script type="text/javascript" src="/_nuxt/7dd5646c91bbd00029e3.js"></script></body>
<script type="text/javascript" src="/_nuxt/12b20e993eb36c6931cf.js"></script><script type="text/javascript" src="/_nuxt/ba3d87d913919f4a90b7.js"></script><script type="text/javascript" src="/_nuxt/b731eebc22dad37c5c4f.js"></script><script type="text/javascript" src="/_nuxt/c06b6bd74999b5452452.js"></script></body>
</html>

View File

@ -15,7 +15,7 @@ public class Scenarios {
return rawScenarios.getScenarioNames();
}
public List<String> getNamedScneario(String scenarioName) {
public List<String> getNamedScenario(String scenarioName) {
return rawScenarios.getNamedScenario(scenarioName);
}
}

View File

@ -84,7 +84,12 @@ public class StmtsDocList implements Iterable<StmtsDoc> {
return docBindings;
}
public List<Scenarios> getDocScenarios() {
return this.getStmtDocs().stream().map(StmtsDoc::getScenarios).collect(Collectors.toList());
/**
* This returns all the `scenarios` blocs across multiple docs, per the description in issue-67 there should only be one
* on the first doc, any `scenarios` defined in different docs will be ignored.
*/
public Scenarios getDocScenarios() {
return this.getStmtDocs().get(0).getScenarios();
}
}

View File

@ -74,6 +74,7 @@ public class NosqlBenchFiles {
}};
for (String path : paths) {
Optional<InputStream> stream = getInputStream(path);
if (stream.isPresent()) {
return Optional.of(Path.of(path));

View File

@ -27,23 +27,23 @@ import java.util.List;
import java.util.Map;
import java.util.function.Function;
public class StrInterpolater implements Function<String, String> {
public class StrInterpolator implements Function<String, String> {
private MultiMap multimap = new MultiMap();
private StrSubstitutor substitutor= new StrSubstitutor(multimap,"<<",">>",'\\');
private StrSubstitutor substitutor2 = new StrSubstitutor(multimap, "TEMPLATE(", ")", '\\');
public StrInterpolater(ActivityDef... activityDefs) {
public StrInterpolator(ActivityDef... activityDefs) {
Arrays.stream(activityDefs)
.map(ad -> ad.getParams().getStringStringMap())
.forEach(multimap::add);
}
public StrInterpolater(Map<String,String> basicMap) {
public StrInterpolator(Map<String,String> basicMap) {
multimap.add(basicMap);
}
// for testing
protected StrInterpolater(List<Map<String, String>> maps) {
protected StrInterpolator(List<Map<String, String>> maps) {
maps.forEach(multimap::add);
}
@ -52,7 +52,7 @@ public class StrInterpolater implements Function<String, String> {
return substitutor.replace(substitutor2.replace(s));
}
private static class MultiMap extends StrLookup<String> {
public static class MultiMap extends StrLookup<String> {
private List<Map<String, String>> maps = new ArrayList<>();
private String warnPrefix = "UNSET";

View File

@ -27,7 +27,7 @@ import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
@Test
public class StrInterpolaterTest {
public class StrInterpolatorTest {
private static List<Map<String, String>> abcd = new ArrayList<Map<String, String>>() {{
add(
@ -54,7 +54,7 @@ public class StrInterpolaterTest {
);
}};
private static StrInterpolater interp = new StrInterpolater(abcd);
private static StrInterpolator interp = new StrInterpolator(abcd);
@Test
public void shouldReturnIdentity() {

View File

@ -1,9 +1,16 @@
package io.nosqlbench.engine.cli;
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.util.NosqlBenchFiles;
import io.nosqlbench.engine.api.util.StrInterpolator;
import io.nosqlbench.engine.api.util.Unit;
import org.apache.commons.text.StrSubstitutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -314,24 +321,66 @@ public class NBCLIOptions {
Cmd script = parseScriptCmd(arglist);
cmdList.add(script);
} else {
Optional<Path> path = NosqlBenchFiles.findOptionalPath(word, "yaml", "activities");
Optional<Path> path = NosqlBenchFiles.findOptionalPath(word, "yaml", "activities", "activities/baselines");
if(path.isPresent()){
arglist.removeFirst();
arglist.addFirst("yaml="+path.toString());
Cmd script = parseWorkloladYamlCmd(arglist);
cmdList.add(script);
String scenarioFilter = null;
if (arglist.size() > 0 && !arglist.peekFirst().contains("=")){
scenarioFilter = arglist.peekFirst();
arglist.removeFirst();
};
arglist.addFirst("yaml="+path.get().toString());
parseWorkloadYamlCmds(path.get().toString(), arglist, scenarioFilter);
}
else {
throw new InvalidParameterException("unrecognized option:" + word);
}
}
break;
}
}
}
private Cmd parseWorkloladYamlCmd(LinkedList<String> arglist) {
private void parseWorkloadYamlCmds(String yamlPath, LinkedList<String> arglist, String scenarioFilter) {
StmtsDocList stmts = StatementsLoader.load(logger, yamlPath);
return null;
Scenarios scenarios = stmts.getDocScenarios();
String scenarioName = "default";
if (scenarioFilter != null){
scenarioName = scenarioFilter;
}
List<String> cmds = scenarios.getNamedScenario(scenarioName);
if (cmds == null){
List<String> names = scenarios.getScenarioNames();
throw new RuntimeException("Unknown scenaro 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(" ");
Map<String, String> paramMap = new HashMap<>();
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));
// Is there a better way to do this than regex?
parse(cmd.split(" "));
}
arglist.removeFirst();
}
private Map<String, Level> parseLogLevelOverrides(String levelsSpec) {
@ -564,100 +613,100 @@ public class NBCLIOptions {
histoLoggerConfigs.add(String.format("%s:%s:%s",file,pattern,interval));
}
public static enum CmdType {
start,
start2,
run,
run2,
stop,
await,
script,
fragment,
waitmillis,
}
public static class Cmd {
private CmdType cmdType;
private String cmdSpec;
private Map<String, String> cmdArgs;
public Cmd(CmdType cmdType, String cmdSpec) {
this.cmdSpec = cmdSpec;
this.cmdType = cmdType;
public static enum CmdType {
start,
start2,
run,
run2,
stop,
await,
script,
fragment,
waitmillis,
}
public Cmd(CmdType cmdType, String cmdSpec, Map<String, String> cmdArgs) {
this(cmdType, cmdSpec);
this.cmdArgs = cmdArgs;
}
public static class Cmd {
private CmdType cmdType;
private String cmdSpec;
private Map<String, String> cmdArgs;
public String getCmdSpec() {
if (cmdSpec.startsWith("'") && cmdSpec.endsWith("'")) {
return cmdSpec.substring(1,cmdSpec.length()-1);
public Cmd(CmdType cmdType, String cmdSpec) {
this.cmdSpec = cmdSpec;
this.cmdType = cmdType;
}
if (cmdSpec.startsWith("\"") && cmdSpec.endsWith("\"")) {
return cmdSpec.substring(1,cmdSpec.length()-1);
public Cmd(CmdType cmdType, String cmdSpec, Map<String, String> cmdArgs) {
this(cmdType, cmdSpec);
this.cmdArgs = cmdArgs;
}
return cmdSpec;
}
public CmdType getCmdType() {
return cmdType;
}
public String getCmdSpec() {
public void setCmdType(CmdType cmdType) {
this.cmdType = cmdType;
}
if (cmdSpec.startsWith("'") && cmdSpec.endsWith("'")) {
return cmdSpec.substring(1,cmdSpec.length()-1);
}
if (cmdSpec.startsWith("\"") && cmdSpec.endsWith("\"")) {
return cmdSpec.substring(1,cmdSpec.length()-1);
}
return cmdSpec;
}
public Map<String, String> getCmdArgs() {
return cmdArgs;
}
public CmdType getCmdType() {
return cmdType;
}
public String toString() {
return "type:" + cmdType + ";spec=" + cmdSpec
+ ((cmdArgs != null) ? ";cmdArgs=" + cmdArgs.toString() : "");
}
}
public void setCmdType(CmdType cmdType) {
this.cmdType = cmdType;
}
public static class LoggerConfig {
public String file = "";
public String pattern = ".*";
public String interval = "30 seconds";
public Map<String, String> getCmdArgs() {
return cmdArgs;
}
public LoggerConfig(String histoLoggerSpec) {
String[] words = histoLoggerSpec.split(":");
switch (words.length) {
case 3:
interval = words[2].isEmpty() ? interval : words[2];
case 2:
pattern = words[1].isEmpty() ? pattern : words[1];
case 1:
file = words[0];
if (file.isEmpty()) {
throw new RuntimeException("You must not specify an empty file here for logging data.");
}
break;
default:
throw new RuntimeException(
LOG_HISTO +
" options must be in either 'regex:filename:interval' or 'regex:filename' or 'filename' format"
);
public String toString() {
return "type:" + cmdType + ";spec=" + cmdSpec
+ ((cmdArgs != null) ? ";cmdArgs=" + cmdArgs.toString() : "");
}
}
public String getFilename() {
return file;
}
}
public static class LoggerConfig {
public String file = "";
public String pattern = ".*";
public String interval = "30 seconds";
private static class ProgressSpec {
public String intervalSpec;
public IndicatorMode indicatorMode;
public String toString() {
return indicatorMode.toString()+":" + intervalSpec;
public LoggerConfig(String histoLoggerSpec) {
String[] words = histoLoggerSpec.split(":");
switch (words.length) {
case 3:
interval = words[2].isEmpty() ? interval : words[2];
case 2:
pattern = words[1].isEmpty() ? pattern : words[1];
case 1:
file = words[0];
if (file.isEmpty()) {
throw new RuntimeException("You must not specify an empty file here for logging data.");
}
break;
default:
throw new RuntimeException(
LOG_HISTO +
" options must be in either 'regex:filename:interval' or 'regex:filename' or 'filename' format"
);
}
}
public String getFilename() {
return file;
}
}
private static class ProgressSpec {
public String intervalSpec;
public IndicatorMode indicatorMode;
public String toString() {
return indicatorMode.toString()+":" + intervalSpec;
}
}
}
private ProgressSpec parseProgressSpec(String interval) {
ProgressSpec progressSpec = new ProgressSpec();

View File

@ -2,7 +2,7 @@ package io.nosqlbench.engine.cli;
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
import io.nosqlbench.engine.api.util.NosqlBenchFiles;
import io.nosqlbench.engine.api.util.StrInterpolater;
import io.nosqlbench.engine.api.util.StrInterpolator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -86,8 +86,8 @@ public class NBCLIScriptAssembly {
} catch (Throwable t) {
throw new RuntimeException("Unable to buffer " + cmd.getCmdSpec() + ": " + t);
}
StrInterpolater interpolater = new StrInterpolater(cmd.getCmdArgs());
scriptData = interpolater.apply(scriptData);
StrInterpolator interpolator = new StrInterpolator(cmd.getCmdArgs());
scriptData = interpolator.apply(scriptData);
return new ScriptData(scriptData,cmd.getCmdArgs());
}

View File

@ -187,4 +187,16 @@ public class TestNBCLIOptions {
}
@Test
public void cqlIotYamlScenario() {
EBCLIOptions opts = new EBCLIOptions(new String[]{ "scenario-test" });
List<EBCLIOptions.Cmd> cmds = opts.getCommands();
}
@Test
public void cqlIotYamlScenarioSchemaOnly() {
EBCLIOptions opts = new EBCLIOptions(new String[]{ "scenario-test", "schema-only"});
List<EBCLIOptions.Cmd> cmds = opts.getCommands();
}
}

View File

@ -0,0 +1,26 @@
# nb -v run type=cql yaml=baselines/cql-iot tags=phase:schema host=dsehost
scenarios:
default:
- 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:main cycles=TEMPLATE(cycles,10)
schema-only:
- run type=stdout yaml=scenario-test tags=phase:schema
blocks:
- tags:
phase: schema
statements:
- create-keyspace: |
create keyspace if not exists puppies
- tags:
phase: rampup
statements:
- insert: |
insert into puppies (test) values (1) ;
- tags:
phase: main
statements:
- insert: |
insert into puppies (test) values (1) ;
- select: |
select * from puppies;