From e24af60c881d27df65a5ebcf02595da905132c56 Mon Sep 17 00:00:00 2001 From: phact Date: Mon, 16 Mar 2020 19:33:15 -0400 Subject: [PATCH 1/2] WIP --- .../activities/baselines/cql-iot.yaml | 12 +- docsys/src/main/node/docsys/package-lock.json | 65 +++--- .../main/resources/docsys-guidebook/200.html | 4 +- ...867b9ff16c0.js => 12b20e993eb36c6931cf.js} | 2 +- ...f9c15c6d621.js => 3fc8daf49bf0ed8c9dfd.js} | 2 +- ...093f6fe5786.js => a2beba7c0d21de5af2f7.js} | 2 +- ...e26b25bda78.js => c06b6bd74999b5452452.js} | 2 +- .../resources/docsys-guidebook/index.html | 4 +- .../api/activityconfig/yaml/Scenarios.java | 2 +- .../api/activityconfig/yaml/StmtsDocList.java | 9 +- .../engine/api/util/NosqlBenchFiles.java | 1 + .../nosqlbench/engine/cli/EBCLIOptions.java | 190 ++++++++++-------- .../engine/cli/TestNBCLIOptions.java | 12 ++ .../resources/activities/scenario-test.yaml | 26 +++ 14 files changed, 197 insertions(+), 136 deletions(-) rename docsys/src/main/resources/docsys-guidebook/_nuxt/{71d233994867b9ff16c0.js => 12b20e993eb36c6931cf.js} (95%) rename docsys/src/main/resources/docsys-guidebook/_nuxt/{09eb2af0af9c15c6d621.js => 3fc8daf49bf0ed8c9dfd.js} (72%) rename docsys/src/main/resources/docsys-guidebook/_nuxt/{c28caf599093f6fe5786.js => a2beba7c0d21de5af2f7.js} (69%) rename docsys/src/main/resources/docsys-guidebook/_nuxt/{4f2a13032e26b25bda78.js => c06b6bd74999b5452452.js} (99%) create mode 100644 engine-cli/src/test/resources/activities/scenario-test.yaml diff --git a/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml b/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml index c3586fafe..f48402ced 100644 --- a/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml +++ b/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml @@ -1,5 +1,13 @@ -# nb -v run type=cql yaml=baselines/cql-iot tags=phase:schema - host=dsehost +# 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 + - run type=cql yaml=baselines/cql-iot tags=phase:rampup cycles=TEMPLATE(cycles,10000000) + - run type=cql yaml=baselines/cql-iot tags=phase:main cycles=TEMPLATE(cycles,10000000) + stdout: + - run type=cql yaml=baselines/cql-iot tags=phase:schema + - run type=cql yaml=baselines/cql-iot tags=phase:rampup cycles=TEMPLATE(cycles,10000000) + - run type=cql yaml=baselines/cql-iot tags=phase:main cycles=TEMPLATE(cycles,10000000) bindings: machine_id: Mod(<>); ToHashedUUID() -> java.util.UUID sensor_name: HashedLineToString('data/variable_words.txt') diff --git a/docsys/src/main/node/docsys/package-lock.json b/docsys/src/main/node/docsys/package-lock.json index 5fb29b1fb..61ccd4b67 100644 --- a/docsys/src/main/node/docsys/package-lock.json +++ b/docsys/src/main/node/docsys/package-lock.json @@ -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", @@ -9504,7 +9494,6 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -9519,9 +9508,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": { @@ -9546,8 +9535,8 @@ "bundled": true, "optional": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "npm-bundled": { @@ -9555,7 +9544,7 @@ "bundled": true, "optional": true, "requires": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "1.0.1" } }, "npm-normalize-package-bin": { @@ -9568,8 +9557,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": { @@ -9585,8 +9574,7 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, - "optional": true + "bundled": true }, "object-assign": { "version": "4.1.1", @@ -9616,8 +9604,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": { @@ -9672,8 +9660,7 @@ }, "safe-buffer": { "version": "5.1.2", - "bundled": true, - "optional": true + "bundled": true }, "safer-buffer": { "version": "2.1.2", @@ -9715,7 +9702,7 @@ "bundled": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "strip-ansi": { diff --git a/docsys/src/main/resources/docsys-guidebook/200.html b/docsys/src/main/resources/docsys-guidebook/200.html index 0e053186f..8b690ebcb 100644 --- a/docsys/src/main/resources/docsys-guidebook/200.html +++ b/docsys/src/main/resources/docsys-guidebook/200.html @@ -1,9 +1,9 @@ - guidebooknosqlbench docs + guidebooknosqlbench docs
Loading...
- + diff --git a/docsys/src/main/resources/docsys-guidebook/_nuxt/71d233994867b9ff16c0.js b/docsys/src/main/resources/docsys-guidebook/_nuxt/12b20e993eb36c6931cf.js similarity index 95% rename from docsys/src/main/resources/docsys-guidebook/_nuxt/71d233994867b9ff16c0.js rename to docsys/src/main/resources/docsys-guidebook/_nuxt/12b20e993eb36c6931cf.js index 9bc755010..9fdda78cd 100644 --- a/docsys/src/main/resources/docsys-guidebook/_nuxt/71d233994867b9ff16c0.js +++ b/docsys/src/main/resources/docsys-guidebook/_nuxt/12b20e993eb36c6931cf.js @@ -1 +1 @@ -!function(e){function r(data){for(var r,n,f=data[0],l=data[1],d=data[2],i=0,h=[];i tag\n\n// load the styles\nvar content = __webpack_require__(242);\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(44).default\nvar update = add(\"17cd7cb6\", content, true, {\"sourceMap\":false});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL01hcmtkb3duVnVlLnZ1ZT8xNzA4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLEdBQTJWO0FBQ2pYLDRDQUE0QyxRQUFTO0FBQ3JEO0FBQ0E7QUFDQSxVQUFVLG1CQUFPLENBQUMsRUFBMEQ7QUFDNUUsNkNBQTZDLGtCQUFrQiIsImZpbGUiOiIyMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMy1vbmVPZi0xLTEhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tMy1vbmVPZi0xLTIhLi4vbm9kZV9tb2R1bGVzL3Z1ZXRpZnktbG9hZGVyL2xpYi9sb2FkZXIuanM/P3JlZi0tMTYtMCEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL01hcmtkb3duVnVlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9Y3NzJlwiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCIxN2NkN2NiNlwiLCBjb250ZW50LCB0cnVlLCB7XCJzb3VyY2VNYXBcIjpmYWxzZX0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///216\n")},232:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(47);\n/* harmony import */ var core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10);\n/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(95);\n/* harmony import */ var core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17);\n/* harmony import */ var core_js_modules_es6_string_ends_with__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(251);\n/* harmony import */ var core_js_modules_es6_string_ends_with__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_ends_with__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es6_array_find__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(135);\n/* harmony import */ var core_js_modules_es6_array_find__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_array_find__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_es6_array_from__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(140);\n/* harmony import */ var core_js_modules_es6_array_from__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_array_from__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(59);\n/* harmony import */ var core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var core_js_modules_es6_date_to_string__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(60);\n/* harmony import */ var core_js_modules_es6_date_to_string__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_date_to_string__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var core_js_modules_es6_set__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(252);\n/* harmony import */ var core_js_modules_es6_set__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_set__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(7);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(6);\n/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(61);\n/* harmony import */ var core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_iterator__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(35);\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var core_js_modules_es7_array_includes__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(45);\n/* harmony import */ var core_js_modules_es7_array_includes__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_array_includes__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var core_js_modules_es6_string_includes__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(58);\n/* harmony import */ var core_js_modules_es6_string_includes__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_includes__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(46);\n/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_17__);\n/* harmony import */ var regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(62);\n/* harmony import */ var regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_18__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// asyncData in multiple mixins seems to be broken, or worse, working as designed\n/* harmony default export */ __webpack_exports__["a"] = ({\n asyncData: function asyncData(context) {\n var fetchStatusHandler, baseurl, services, fm, paths, imports, promises, _loop, index, _ret, mdData, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, data, _rawMD, mdMeta, categorySet, categories, active_category, active_category_name, active_topic, parts, foundCategory, docname, docbody, mdPath, rawMD, markdown, mydata;\n\n return regeneratorRuntime.async(function asyncData$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n fetchStatusHandler = function _ref(response) {\n if (response.status === 200) {\n return response;\n } else {\n throw new Error(response.statusText);\n }\n };\n\n if (!context.req) {\n _context.next = 4;\n break;\n }\n\n console.log("avoiding server-side async");\n return _context.abrupt("return");\n\n case 4:\n baseurl = document.location.href.split(\'/\').slice(0, 3).join(\'/\');\n\n if (context.isDev && baseurl.includes(":3000")) {\n console.log("Dev mode: remapping 3000 to 12345 for split dev environment.");\n baseurl = baseurl.replace("3000", "12345");\n }\n\n services = baseurl + "/services";\n console.log("async loading get_categories data: context: " + context);\n fm = __webpack_require__(220);\n _context.next = 11;\n return regeneratorRuntime.awrap(fetch(services + "/docs/markdown.csv").then(function (res) {\n return res.text();\n }).then(function (body) {\n return body.split("\\n");\n }).catch(function (err) {\n console.log("error:" + err);\n }));\n\n case 11:\n paths = _context.sent;\n imports = [];\n promises = [];\n\n _loop = function _loop(index) {\n var key = paths[index];\n\n if (key == null || key == "") {\n return "continue";\n }\n\n var _key$match = key.match(/(.+)\\.md$/),\n _key$match2 = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"])(_key$match, 2),\n name = _key$match2[1];\n\n var detailName = key.split("/").filter(function (x) {\n return x.includes(".md");\n })[0];\n detailName = detailName.substr(0, detailName.length - 3);\n var categories = key.split("/").filter(function (x) {\n return !x.includes(".");\n }); //const mdMeta = resolve(key);\n\n promises.push(fetch(services + "/docs/markdown/" + key).then(function (res) {\n return res.text();\n }).then(function (body) {\n return {\n "rawMD": body,\n "detailName": detailName,\n "categories": categories,\n "name": name\n };\n }));\n };\n\n _context.t0 = regeneratorRuntime.keys(paths);\n\n case 16:\n if ((_context.t1 = _context.t0()).done) {\n _context.next = 23;\n break;\n }\n\n index = _context.t1.value;\n _ret = _loop(index);\n\n if (!(_ret === "continue")) {\n _context.next = 21;\n break;\n }\n\n return _context.abrupt("continue", 16);\n\n case 21:\n _context.next = 16;\n break;\n\n case 23:\n _context.next = 25;\n return regeneratorRuntime.awrap(Promise.all(promises));\n\n case 25:\n mdData = _context.sent;\n _iteratorNormalCompletion = true;\n _didIteratorError = false;\n _iteratorError = undefined;\n _context.prev = 29;\n\n for (_iterator = mdData[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n data = _step.value;\n _rawMD = data.rawMD;\n mdMeta = fm(_rawMD);\n\n if (mdMeta.attributes == null || mdMeta.attributes.title == null) {\n mdMeta.attributes.title = data.detailName;\n }\n\n if (typeof mdMeta.attributes.weight === \'undefined\') {\n mdMeta.attributes.weight = 0;\n }\n\n mdMeta.categories = data.categories;\n mdMeta.filename = encodeURIComponent(data.name); //console.log("mdMeta:" + JSON.stringify(mdMeta));\n\n imports.push(mdMeta);\n }\n\n _context.next = 37;\n break;\n\n case 33:\n _context.prev = 33;\n _context.t2 = _context["catch"](29);\n _didIteratorError = true;\n _iteratorError = _context.t2;\n\n case 37:\n _context.prev = 37;\n _context.prev = 38;\n\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n\n case 40:\n _context.prev = 40;\n\n if (!_didIteratorError) {\n _context.next = 43;\n break;\n }\n\n throw _iteratorError;\n\n case 43:\n return _context.finish(40);\n\n case 44:\n return _context.finish(37);\n\n case 45:\n categorySet = new Set();\n imports.forEach(function (x) {\n categorySet.add(x.categories.toString());\n });\n categories = Array.from(categorySet).map(function (category) {\n var docs = imports.filter(function (x) {\n return x.categories.toString() === category;\n });\n var summarydoc = docs.find(function (x) {\n return x.filename.endsWith(\'index\');\n });\n docs = docs.filter(function (x) {\n return !x.filename.endsWith(\'index\');\n });\n docs.forEach(function (d) {\n return delete d.body;\n });\n docs.sort(function (a, b) {\n return a.attributes.weight - b.attributes.weight;\n });\n var weight = summarydoc ? summarydoc.attributes.weight : 0;\n var categoryName = summarydoc ? summarydoc.attributes.title ? summarydoc.attributes.title : category : category;\n return {\n category: category,\n categoryName: categoryName,\n docs: docs,\n summarydoc: summarydoc,\n weight: weight\n };\n }).sort(function (c1, c2) {\n return c1.weight - c2.weight;\n });\n active_category = \'\';\n active_category_name = \'\';\n active_topic = \'\'; // IFF no category was active, then make the first category active.\n\n if (!context.params.slug) {\n console.log("params.slug was not defined");\n active_category = categories[0].category;\n active_category_name = categories[0].categoryName;\n\n if (categories[0].summarydoc == null && categories[0].docs.length > 0) {\n active_topic = categories[0].docs[0].filename;\n }\n } else {\n console.log("params.slug was defined:" + context.params.slug);\n parts = context.params.slug.split("/", 2);\n active_category = parts[0];\n console.log("active_cateogory: " + active_category);\n active_topic = parts.length > 1 ? parts[1] : null;\n }\n\n if (active_topic !== null && active_topic.endsWith(".html")) {\n active_topic = active_topic.substr(0, active_topic.length - 5);\n }\n\n if (active_topic !== null && active_topic.endsWith(".md")) {\n active_topic = active_topic.substr(0, active_topic.length - 3);\n }\n\n if (active_category !== null && active_category.endsWith(".html")) {\n active_category = active_category.substr(0, active_category.length - 5);\n }\n\n if (active_category !== null && active_category.endsWith(".md")) {\n active_category = active_category.substr(0, active_category.length - 3);\n }\n\n foundCategory = categories.find(function (c) {\n return c.category === active_category;\n });\n\n if (foundCategory != undefined) {\n active_category_name = categories.find(function (c) {\n return c.category === active_category;\n }).categoryName;\n }\n\n console.log("active_category:" + active_category);\n console.log("active_topic:" + active_topic); // At this point, we have an active category or even a topic.\n // We\'re all in on loading markdown, but which one?\n\n docname = active_category;\n\n if (active_topic) {\n docname += \'/\' + active_topic + \'.md\';\n } else {\n docname += \'/\' + \'index.md\';\n }\n\n console.log("docname: " + docname);\n fm = __webpack_require__(220);\n docbody = "";\n mdPath = services + \'/docs/markdown/\' + docname;\n _context.next = 68;\n return regeneratorRuntime.awrap(fetch(services + "/docs/markdown/" + docname).then(fetchStatusHandler).then(function (res) {\n return res.text();\n }).then(function (body) {\n return docbody = body;\n }).catch(function (error) {\n console.log(error);\n }));\n\n case 68:\n rawMD = _context.sent;\n ;\n markdown = fm(rawMD); // console.log("markdown_body:\\n" + markdown.body);\n\n mydata = {\n markdown_attr: markdown.attributes,\n markdown_body: markdown.body,\n categories: categories,\n active_category: active_category,\n active_category_name: active_category_name,\n active_topic: active_topic\n };\n return _context.abrupt("return", mydata);\n\n case 73:\n case "end":\n return _context.stop();\n }\n }\n }, null, null, [[29, 33, 37, 45], [38,, 40, 44]]);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9taXhpbnMvZ2V0X2RhdGEuanM/Y2JmZSJdLCJuYW1lcyI6WyJhc3luY0RhdGEiLCJjb250ZXh0IiwiZmV0Y2hTdGF0dXNIYW5kbGVyIiwicmVzcG9uc2UiLCJzdGF0dXMiLCJFcnJvciIsInN0YXR1c1RleHQiLCJyZXEiLCJjb25zb2xlIiwibG9nIiwiYmFzZXVybCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJocmVmIiwic3BsaXQiLCJzbGljZSIsImpvaW4iLCJpc0RldiIsImluY2x1ZGVzIiwicmVwbGFjZSIsInNlcnZpY2VzIiwiZm0iLCJyZXF1aXJlIiwiZmV0Y2giLCJ0aGVuIiwicmVzIiwidGV4dCIsImJvZHkiLCJjYXRjaCIsImVyciIsInBhdGhzIiwiaW1wb3J0cyIsInByb21pc2VzIiwiaW5kZXgiLCJrZXkiLCJtYXRjaCIsIm5hbWUiLCJkZXRhaWxOYW1lIiwiZmlsdGVyIiwieCIsInN1YnN0ciIsImxlbmd0aCIsImNhdGVnb3JpZXMiLCJwdXNoIiwiUHJvbWlzZSIsImFsbCIsIm1kRGF0YSIsImRhdGEiLCJyYXdNRCIsIm1kTWV0YSIsImF0dHJpYnV0ZXMiLCJ0aXRsZSIsIndlaWdodCIsImZpbGVuYW1lIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY2F0ZWdvcnlTZXQiLCJTZXQiLCJmb3JFYWNoIiwiYWRkIiwidG9TdHJpbmciLCJBcnJheSIsImZyb20iLCJtYXAiLCJjYXRlZ29yeSIsImRvY3MiLCJzdW1tYXJ5ZG9jIiwiZmluZCIsImVuZHNXaXRoIiwiZCIsInNvcnQiLCJhIiwiYiIsImNhdGVnb3J5TmFtZSIsImMxIiwiYzIiLCJhY3RpdmVfY2F0ZWdvcnkiLCJhY3RpdmVfY2F0ZWdvcnlfbmFtZSIsImFjdGl2ZV90b3BpYyIsInBhcmFtcyIsInNsdWciLCJwYXJ0cyIsImZvdW5kQ2F0ZWdvcnkiLCJjIiwidW5kZWZpbmVkIiwiZG9jbmFtZSIsImRvY2JvZHkiLCJtZFBhdGgiLCJlcnJvciIsIm1hcmtkb3duIiwi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NkNBeUxKWSxNQXpMSTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLENBQWYiLCJmaWxlIjoiMjMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gYXN5bmNEYXRhIGluIG11bHRpcGxlIG1peGlucyBzZWVtcyB0byBiZSBicm9rZW4sIG9yIHdvcnNlLCB3b3JraW5nIGFzIGRlc2lnbmVkXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzeW5jIGFzeW5jRGF0YShjb250ZXh0KSB7XG5cbiAgICBmdW5jdGlvbiBmZXRjaFN0YXR1c0hhbmRsZXIocmVzcG9uc2UpIHtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQucmVxKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImF2b2lkaW5nIHNlcnZlci1zaWRlIGFzeW5jXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBiYXNldXJsID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi5zcGxpdCgnLycpLnNsaWNlKDAsMykuam9pbignLycpO1xuICAgIGlmIChjb250ZXh0LmlzRGV2ICYmIGJhc2V1cmwuaW5jbHVkZXMoXCI6MzAwMFwiKSkge1xuICAgICAgY29uc29sZS5sb2coXCJEZXYgbW9kZTogcmVtYXBwaW5nIDMwMDAgdG8gMTIzNDUgZm9yIHNwbGl0IGRldiBlbnZpcm9ubWVudC5cIik7XG4gICAgICBiYXNldXJsID0gYmFzZXVybC5yZXBsYWNlKFwiMzAwMFwiLFwiMTIzNDVcIik7XG4gICAgfVxuXG4gICAgbGV0IHNlcnZpY2VzID0gYmFzZXVybCArIFwiL3NlcnZpY2VzXCI7XG5cbiAgICBjb25zb2xlLmxvZyhcImFzeW5jIGxvYWRpbmcgZ2V0X2NhdGVnb3JpZXMgZGF0YTogY29udGV4dDogXCIgKyBjb250ZXh0KTtcbiAgICB2YXIgZm0gPSByZXF1aXJlKCdmcm9udC1tYXR0ZXInKTtcblxuXG4gICAgbGV0IHBhdGhzID0gYXdhaXQgZmV0Y2goc2VydmljZXMrXCIvZG9jcy9tYXJrZG93bi5jc3ZcIilcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIHJldHVybiByZXMudGV4dCgpXG4gICAgICB9KVxuICAgICAgLnRoZW4oYm9keSA9PiB7XG4gICAgICAgIHJldHVybiBib2R5LnNwbGl0KFwiXFxuXCIpXG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3I6XCIgKyBlcnIpXG4gICAgICB9KTtcblxuICAgIGxldCBpbXBvcnRzID0gW107XG4gICAgbGV0IHByb21pc2VzID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCBpbiBwYXRocykge1xuICAgICAgbGV0IGtleSA9IHBhdGhzW2luZGV4XTtcbiAgICAgIGlmIChrZXkgPT0gbnVsbCB8fCBrZXkgPT0gXCJcIikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgWywgbmFtZV0gPSBrZXkubWF0Y2goLyguKylcXC5tZCQvKTtcbiAgICAgIGxldCBkZXRhaWxOYW1lID0ga2V5LnNwbGl0KFwiL1wiKS5maWx0ZXIoeCA9PiB4LmluY2x1ZGVzKFwiLm1kXCIpKVswXTtcbiAgICAgIGRldGFpbE5hbWUgPSBkZXRhaWxOYW1lLnN1YnN0cigwLCBkZXRhaWxOYW1lLmxlbmd0aCAtIDMpO1xuXG4gICAgICBsZXQgY2F0ZWdvcmllcyA9IGtleS5zcGxpdChcIi9cIikuZmlsdGVyKHggPT4gIXguaW5jbHVkZXMoXCIuXCIpKVxuICAgICAgLy9jb25zdCBtZE1ldGEgPSByZXNvbHZlKGtleSk7XG4gICAgICBwcm9taXNlcy5wdXNoKGZldGNoKHNlcnZpY2VzICsgXCIvZG9jcy9tYXJrZG93bi9cIiArIGtleSlcbiAgICAgICAgLnRoZW4ocmVzID0+IHJlcy50ZXh0KCkpXG4gICAgICAgIC50aGVuKGJvZHkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBcInJhd01EXCI6IGJvZHksXG4gICAgICAgICAgICBcImRldGFpbE5hbWVcIjogZGV0YWlsTmFtZSxcbiAgICAgICAgICAgIFwiY2F0ZWdvcmllc1wiOiBjYXRlZ29yaWVzLFxuICAgICAgICAgICAgXCJuYW1lXCI6IG5hbWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgdmFyIG1kRGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcHJvbWlzZXNcbiAgICApO1xuXG4gICAgZm9yKHZhciBkYXRhIG9mIG1kRGF0YSl7XG5cbiAgICAgIGxldCByYXdNRCA9IGRhdGEucmF3TUQ7XG5cbiAgICAgIHZhciBtZE1ldGEgPSBmbShyYXdNRCk7XG5cbiAgICAgIGlmIChtZE1ldGEuYXR0cmlidXRlcyA9PSBudWxsIHx8IG1kTWV0YS5hdHRyaWJ1dGVzLnRpdGxlID09IG51bGwpIHtcbiAgICAgICAgbWRNZXRhLmF0dHJpYnV0ZXMudGl0bGUgPSBkYXRhLmRldGFpbE5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG1kTWV0YS5hdHRyaWJ1dGVzLndlaWdodCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbWRNZXRhLmF0dHJpYnV0ZXMud2VpZ2h0ID0gMDtcbiAgICAgIH1cblxuICAgICAgbWRNZXRhLmNhdGVnb3JpZXMgPSBkYXRhLmNhdGVnb3JpZXM7XG4gICAgICBtZE1ldGEuZmlsZW5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGF0YS5uYW1lKTtcblxuICAgICAgLy9jb25zb2xlLmxvZyhcIm1kTWV0YTpcIiArIEpTT04uc3RyaW5naWZ5KG1kTWV0YSkpO1xuICAgICAgaW1wb3J0cy5wdXNoKG1kTWV0YSk7XG4gICAgfVxuICAgIGNvbnN0IGNhdGVnb3J5U2V0ID0gbmV3IFNldCgpO1xuICAgIGltcG9ydHMuZm9yRWFjaCh4ID0+IHtcbiAgICAgIGNhdGVnb3J5U2V0LmFkZCh4LmNhdGVnb3JpZXMudG9TdHJpbmcoKSlcbiAgICB9KTtcblxuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBBcnJheS5mcm9tKGNhdGVnb3J5U2V0KS5tYXAoY2F0ZWdvcnkgPT4ge1xuICAgICAgICBsZXQgZG9jcyA9IGltcG9ydHMuZmlsdGVyKHggPT4geC5jYXRlZ29yaWVzLnRvU3RyaW5nKCkgPT09IGNhdGVnb3J5KTtcbiAgICAgICAgbGV0IHN1bW1hcnlkb2MgPSBkb2NzLmZpbmQoeCA9PiB4LmZpbGVuYW1lLmVuZHNXaXRoKCdpbmRleCcpKTtcbiAgICAgICAgZG9jcyA9IGRvY3MuZmlsdGVyKHg9PiF4LmZpbGVuYW1lLmVuZHNXaXRoKCdpbmRleCcpKTtcbiAgICAgICAgZG9jcy5mb3JFYWNoKGQgPT4gZGVsZXRlIGQuYm9keSk7XG4gICAgICAgIGRvY3Muc29ydCgoYSwgYikgPT4gYS5hdHRyaWJ1dGVzLndlaWdodCAtIGIuYXR0cmlidXRlcy53ZWlnaHQpO1xuICAgICAgICBsZXQgd2VpZ2h0ID0gc3VtbWFyeWRvYyA/IHN1bW1hcnlkb2MuYXR0cmlidXRlcy53ZWlnaHQgOiAwO1xuICAgICAgICBsZXQgY2F0ZWdvcnlOYW1lID0gc3VtbWFyeWRvYyA/ICggc3VtbWFyeWRvYy5hdHRyaWJ1dGVzLnRpdGxlID8gc3VtbWFyeWRvYy5hdHRyaWJ1dGVzLnRpdGxlIDogY2F0ZWdvcnkgKSA6IGNhdGVnb3J5O1xuICAgICAgICByZXR1cm4ge2NhdGVnb3J5LCBjYXRlZ29yeU5hbWUsIGRvY3MsIHN1bW1hcnlkb2MsIHdlaWdodH1cbiAgICAgIH1cbiAgICApLnNvcnQoKGMxLGMyKSA9PiBjMS53ZWlnaHQgLSBjMi53ZWlnaHQpO1xuXG4gICAgbGV0IGFjdGl2ZV9jYXRlZ29yeT0nJztcbiAgICBsZXQgYWN0aXZlX2NhdGVnb3J5X25hbWU9Jyc7XG4gICAgbGV0IGFjdGl2ZV90b3BpYz0nJztcblxuICAgIC8vIElGRiBubyBjYXRlZ29yeSB3YXMgYWN0aXZlLCB0aGVuIG1ha2UgdGhlIGZpcnN0IGNhdGVnb3J5IGFjdGl2ZS5cbiAgICBpZiAoIWNvbnRleHQucGFyYW1zLnNsdWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGFyYW1zLnNsdWcgd2FzIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgYWN0aXZlX2NhdGVnb3J5PWNhdGVnb3JpZXNbMF0uY2F0ZWdvcnk7XG4gICAgICBhY3RpdmVfY2F0ZWdvcnlfbmFtZT1jYXRlZ29yaWVzWzBdLmNhdGVnb3J5TmFtZTtcblxuICAgICAgaWYgKGNhdGVnb3JpZXNbMF0uc3VtbWFyeWRvYyA9PSBudWxsICYmIGNhdGVnb3JpZXNbMF0uZG9jcy5sZW5ndGg+MCkge1xuICAgICAgICAgIGFjdGl2ZV90b3BpYyA9IGNhdGVnb3JpZXNbMF0uZG9jc1swXS5maWxlbmFtZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJwYXJhbXMuc2x1ZyB3YXMgZGVmaW5lZDpcIiArIGNvbnRleHQucGFyYW1zLnNsdWcpO1xuICAgICAgbGV0IHBhcnRzID0gY29udGV4dC5wYXJhbXMuc2x1Zy5zcGxpdChcIi9cIiwyKTtcbiAgICAgIGFjdGl2ZV9jYXRlZ29yeT1wYXJ0c1swXTtcbiAgICAgIGNvbnNvbGUubG9nKFwiYWN0aXZlX2NhdGVvZ29yeTogXCIgKyBhY3RpdmVfY2F0ZWdvcnkpO1xuICAgICAgYWN0aXZlX3RvcGljID0gcGFydHMubGVuZ3RoPjEgPyBwYXJ0c1sxXSA6IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFjdGl2ZV90b3BpYyAhPT0gbnVsbCAmJiBhY3RpdmVfdG9waWMuZW5kc1dpdGgoXCIuaHRtbFwiKSkge1xuICAgICAgYWN0aXZlX3RvcGljID0gYWN0aXZlX3RvcGljLnN1YnN0cigwLGFjdGl2ZV90b3BpYy5sZW5ndGgtNSk7XG4gICAgfVxuICAgIGlmIChhY3RpdmVfdG9waWMgIT09IG51bGwgJiYgYWN0aXZlX3RvcGljLmVuZHNXaXRoKFwiLm1kXCIpKSB7XG4gICAgICBhY3RpdmVfdG9waWMgPSBhY3RpdmVfdG9waWMuc3Vic3RyKDAsYWN0aXZlX3RvcGljLmxlbmd0aC0zKTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlX2NhdGVnb3J5ICE9PSBudWxsICYmIGFjdGl2ZV9jYXRlZ29yeS5lbmRzV2l0aChcIi5odG1sXCIpKSB7XG4gICAgICBhY3RpdmVfY2F0ZWdvcnkgPSBhY3RpdmVfY2F0ZWdvcnkuc3Vic3RyKDAsYWN0aXZlX2NhdGVnb3J5Lmxlbmd0aC01KTtcbiAgICB9XG4gICAgaWYgKGFjdGl2ZV9jYXRlZ29yeSAhPT0gbnVsbCAmJiBhY3RpdmVfY2F0ZWdvcnkuZW5kc1dpdGgoXCIubWRcIikpIHtcbiAgICAgIGFjdGl2ZV9jYXRlZ29yeSA9IGFjdGl2ZV9jYXRlZ29yeS5zdWJzdHIoMCxhY3RpdmVfY2F0ZWdvcnkubGVuZ3RoLTMpO1xuICAgIH1cblxuICAgIGxldCBmb3VuZENhdGVnb3J5ID0gY2F0ZWdvcmllcy5maW5kKGMgPT4gYy5jYXRlZ29yeSA9PT0gYWN0aXZlX2NhdGVnb3J5KTtcblxuICAgIGlmIChmb3VuZENhdGVnb3J5ICE9IHVuZGVmaW5lZCl7XG4gICAgICBhY3RpdmVfY2F0ZWdvcnlfbmFtZSA9IGNhdGVnb3JpZXMuZmluZChjID0+IGMuY2F0ZWdvcnkgPT09IGFjdGl2ZV9jYXRlZ29yeSkuY2F0ZWdvcnlOYW1lO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFwiYWN0aXZlX2NhdGVnb3J5OlwiICsgYWN0aXZlX2NhdGVnb3J5KTtcbiAgICBjb25zb2xlLmxvZyhcImFjdGl2ZV90b3BpYzpcIiArIGFjdGl2ZV90b3BpYyk7XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGFuIGFjdGl2ZSBjYXRlZ29yeSBvciBldmVuIGEgdG9waWMuXG4gICAgLy8gV2UncmUgYWxsIGluIG9uIGxvYWRpbmcgbWFya2Rvd24sIGJ1dCB3aGljaCBvbmU/XG5cbiAgICBsZXQgZG9jbmFtZSA9IGFjdGl2ZV9jYXRlZ29yeTtcblxuICAgIGlmIChhY3RpdmVfdG9waWMpIHtcbiAgICAgIGRvY25hbWUgKz0gJy8nICsgYWN0aXZlX3RvcGljICsgJy5tZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY25hbWUgKz0gJy8nICsgJ2luZGV4Lm1kJztcbiAgICB9XG4gICAgY29uc29sZS5sb2coXCJkb2NuYW1lOiBcIiArIGRvY25hbWUpO1xuICAgIHZhciBmbSA9IHJlcXVpcmUoJ2Zyb250LW1hdHRlcicpO1xuXG4gICAgbGV0IGRvY2JvZHkgPSBcIlwiO1xuXG4gICAgbGV0IG1kUGF0aCA9IHNlcnZpY2VzICsgJy9kb2NzL21hcmtkb3duLycgKyBkb2NuYW1lO1xuXG4gICAgbGV0IHJhd01EID0gYXdhaXQgZmV0Y2goc2VydmljZXMgKyBcIi9kb2NzL21hcmtkb3duL1wiICsgZG9jbmFtZSlcbiAgICAgIC50aGVuKGZldGNoU3RhdHVzSGFuZGxlcilcbiAgICAgIC50aGVuKHJlcyA9PiByZXMudGV4dCgpKVxuICAgICAgLnRoZW4oYm9keSA9PiBkb2Nib2R5ID0gYm9keSlcbiAgICAgIC5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgIH0pOztcblxuXG4gICAgdmFyIG1hcmtkb3duID0gZm0ocmF3TUQpO1xuXG4gICAgLy8gY29uc29sZS5sb2coXCJtYXJrZG93bl9ib2R5OlxcblwiICsgbWFya2Rvd24uYm9keSk7XG4gICAgbGV0IG15ZGF0YSA9IHtcbiAgICAgIG1hcmtkb3duX2F0dHI6IG1hcmtkb3duLmF0dHJpYnV0ZXMsXG4gICAgICBtYXJrZG93bl9ib2R5OiBtYXJrZG93bi5ib2R5LFxuICAgICAgY2F0ZWdvcmllczogY2F0ZWdvcmllcyxcbiAgICAgIGFjdGl2ZV9jYXRlZ29yeTogYWN0aXZlX2NhdGVnb3J5LFxuICAgICAgYWN0aXZlX2NhdGVnb3J5X25hbWUgOiBhY3RpdmVfY2F0ZWdvcnlfbmFtZSxcbiAgICAgIGFjdGl2ZV90b3BpYzogYWN0aXZlX3RvcGljXG4gICAgfTtcbiAgICByZXR1cm4gbXlkYXRhO1xuICB9XG5cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///232\n')},241:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_MarkdownVue_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(216);\n/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_MarkdownVue_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_MarkdownVue_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__);\n/* unused harmony reexport * */\n /* unused harmony default export */ var _unused_webpack_default_export = (_node_modules_vue_style_loader_index_js_ref_3_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_3_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_3_oneOf_1_2_node_modules_vuetify_loader_lib_loader_js_ref_16_0_node_modules_vue_loader_lib_index_js_vue_loader_options_MarkdownVue_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL01hcmtkb3duVnVlLnZ1ZT8zOWIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUF3YSxDQUFnQix3ZUFBRyxFQUFDIiwiZmlsZSI6IjI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanM/P3JlZi0tMy1vbmVPZi0xLTAhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMy1vbmVPZi0xLTEhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tMy1vbmVPZi0xLTIhLi4vbm9kZV9tb2R1bGVzL3Z1ZXRpZnktbG9hZGVyL2xpYi9sb2FkZXIuanM/P3JlZi0tMTYtMCEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL01hcmtkb3duVnVlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9Y3NzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTMtb25lT2YtMS0wIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTMtb25lT2YtMS0xIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTMtb25lT2YtMS0yIS4uL25vZGVfbW9kdWxlcy92dWV0aWZ5LWxvYWRlci9saWIvbG9hZGVyLmpzPz9yZWYtLTE2LTAhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9NYXJrZG93blZ1ZS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPWNzcyZcIiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///241\n")},242:function(module,exports,__webpack_require__){eval('// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(43);\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, ".v-application code:after,.v-application code:before,code.hljs:before,code:after,code:before{content:\\"\\"}.md-body{-webkit-box-pack:left;justify-content:left;-webkit-box-align:left;align-items:left;text-align:left;vertical-align:top;alignment:top;text-align:top;webkit-box-align:initial}.markdown-it-vue-alter-info{border:1px solid #91d5ff;background-color:#e6f7ff}.markdown-it-vue-alert-icon-info{color:#1890ff}.markdown-it-vue-alter-success{border:1px solid #b7eb8f;background-color:#f6ffed}.markdown-it-vue-alert-icon-success{color:#52c41a}.markdown-it-vue-alter-error{border:1px solid #f5222d;background-color:#fff1f0}.markdown-it-vue-alert-icon-error{color:#f5222d}.markdown-it-vue-alter-warning{border:1px solid #ffe58f;background-color:#fffbe6}.markdown-it-vue-alert-icon-warning{color:#faad14}.markdown-it-vue-alter{border-radius:0;border:0;display:-webkit-inline-box;display:inline-flex;font-family:Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:14px;font-feature-settings:\\"tnum\\";font-variant:tabular-nums;line-height:1.5;color:rgba(0,0,0,.65);box-sizing:border-box;list-style:none;position:relative;padding:8px 15px 8px 37px;border-radius:4px;width:100%;margin-bottom:16px}.markdown-it-vue-alter p{margin-bottom:2px}.markdown-it-vue-alert-icon{top:11.5px;left:16px;position:absolute}", ""]);\n// Exports\nmodule.exports = exports;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL01hcmtkb3duVnVlLnZ1ZT8yMDQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0Esa0NBQWtDLG1CQUFPLENBQUMsRUFBZ0Q7QUFDMUY7QUFDQTtBQUNBLGNBQWMsUUFBUyxnR0FBZ0csYUFBYSxTQUFTLHNCQUFzQixxQkFBcUIsdUJBQXVCLGlCQUFpQixnQkFBZ0IsbUJBQW1CLGNBQWMsZUFBZSx5QkFBeUIsNEJBQTRCLHlCQUF5Qix5QkFBeUIsaUNBQWlDLGNBQWMsK0JBQStCLHlCQUF5Qix5QkFBeUIsb0NBQW9DLGNBQWMsNkJBQTZCLHlCQUF5Qix5QkFBeUIsa0NBQWtDLGNBQWMsK0JBQStCLHlCQUF5Qix5QkFBeUIsb0NBQW9DLGNBQWMsdUJBQXVCLGdCQUFnQixTQUFTLDJCQUEyQixvQkFBb0IsNE1BQTRNLGVBQWUsK0JBQStCLDBCQUEwQixnQkFBZ0Isc0JBQXNCLHNCQUFzQixnQkFBZ0Isa0JBQWtCLDBCQUEwQixrQkFBa0IsV0FBVyxtQkFBbUIseUJBQXlCLGtCQUFrQiw0QkFBNEIsV0FBVyxVQUFVLGtCQUFrQjtBQUNwOEM7QUFDQSIsImZpbGUiOiIyNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG52YXIgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fID0gcmVxdWlyZShcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIik7XG5leHBvcnRzID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKGZhbHNlKTtcbi8vIE1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLnYtYXBwbGljYXRpb24gY29kZTphZnRlciwudi1hcHBsaWNhdGlvbiBjb2RlOmJlZm9yZSxjb2RlLmhsanM6YmVmb3JlLGNvZGU6YWZ0ZXIsY29kZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIn0ubWQtYm9keXstd2Via2l0LWJveC1wYWNrOmxlZnQ7anVzdGlmeS1jb250ZW50OmxlZnQ7LXdlYmtpdC1ib3gtYWxpZ246bGVmdDthbGlnbi1pdGVtczpsZWZ0O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjp0b3A7YWxpZ25tZW50OnRvcDt0ZXh0LWFsaWduOnRvcDt3ZWJraXQtYm94LWFsaWduOmluaXRpYWx9Lm1hcmtkb3duLWl0LXZ1ZS1hbHRlci1pbmZve2JvcmRlcjoxcHggc29saWQgIzkxZDVmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlNmY3ZmZ9Lm1hcmtkb3duLWl0LXZ1ZS1hbGVydC1pY29uLWluZm97Y29sb3I6IzE4OTBmZn0ubWFya2Rvd24taXQtdnVlLWFsdGVyLXN1Y2Nlc3N7Ym9yZGVyOjFweCBzb2xpZCAjYjdlYjhmO2JhY2tncm91bmQtY29sb3I6I2Y2ZmZlZH0ubWFya2Rvd24taXQtdnVlLWFsZXJ0LWljb24tc3VjY2Vzc3tjb2xvcjojNTJjNDFhfS5tYXJrZG93bi1pdC12dWUtYWx0ZXItZXJyb3J7Ym9yZGVyOjFweCBzb2xpZCAjZjUyMjJkO2JhY2tncm91bmQtY29sb3I6I2ZmZjFmMH0ubWFya2Rvd24taXQtdnVlLWFsZXJ0LWljb24tZXJyb3J7Y29sb3I6I2Y1MjIyZH0ubWFya2Rvd24taXQtdnVlLWFsdGVyLXdhcm5pbmd7Ym9yZGVyOjFweCBzb2xpZCAjZmZlNThmO2JhY2tncm91bmQtY29sb3I6I2ZmZmJlNn0ubWFya2Rvd24taXQtdnVlLWFsZXJ0LWljb24td2FybmluZ3tjb2xvcjojZmFhZDE0fS5tYXJrZG93bi1pdC12dWUtYWx0ZXJ7Ym9yZGVyLXJhZGl1czowO2JvcmRlcjowO2Rpc3BsYXk6LXdlYmtpdC1pbmxpbmUtYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7Zm9udC1mYW1pbHk6Q2hpbmVzZSBRdW90ZSwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxQaW5nRmFuZyBTQyxIaXJhZ2lubyBTYW5zIEdCLE1pY3Jvc29mdCBZYUhlaSxIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZixBcHBsZSBDb2xvciBFbW9qaSxTZWdvZSBVSSBFbW9qaSxTZWdvZSBVSSBTeW1ib2w7Zm9udC1zaXplOjE0cHg7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXZhcmlhbnQ6dGFidWxhci1udW1zO2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjpyZ2JhKDAsMCwwLC42NSk7Ym94LXNpemluZzpib3JkZXItYm94O2xpc3Qtc3R5bGU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjhweCAxNXB4IDhweCAzN3B4O2JvcmRlci1yYWRpdXM6NHB4O3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToxNnB4fS5tYXJrZG93bi1pdC12dWUtYWx0ZXIgcHttYXJnaW4tYm90dG9tOjJweH0ubWFya2Rvd24taXQtdnVlLWFsZXJ0LWljb257dG9wOjExLjVweDtsZWZ0OjE2cHg7cG9zaXRpb246YWJzb2x1dGV9XCIsIFwiXCJdKTtcbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///242\n')},243:function(module,exports,__webpack_require__){eval("// style-loader: Adds some css to the DOM by adding a
Loading...
- + diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/Scenarios.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/Scenarios.java index 45d795b8e..53cb91ea0 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/Scenarios.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/Scenarios.java @@ -15,7 +15,7 @@ public class Scenarios { return rawScenarios.getScenarioNames(); } - public List getNamedScneario(String scenarioName) { + public List getNamedScenario(String scenarioName) { return rawScenarios.getNamedScenario(scenarioName); } } diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java index 327babfaa..cb9152722 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityconfig/yaml/StmtsDocList.java @@ -84,7 +84,12 @@ public class StmtsDocList implements Iterable { return docBindings; } - public List 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(); } } diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/util/NosqlBenchFiles.java b/engine-api/src/main/java/io/nosqlbench/engine/api/util/NosqlBenchFiles.java index 1b38da18a..d9bcb9261 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/util/NosqlBenchFiles.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/util/NosqlBenchFiles.java @@ -74,6 +74,7 @@ public class NosqlBenchFiles { }}; for (String path : paths) { + Optional stream = getInputStream(path); if (stream.isPresent()) { return Optional.of(Path.of(path)); diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIOptions.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIOptions.java index fd5f087e6..c222ced68 100644 --- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIOptions.java +++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIOptions.java @@ -1,6 +1,9 @@ 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.metrics.IndicatorMode; import io.nosqlbench.engine.api.util.NosqlBenchFiles; import io.nosqlbench.engine.api.util.Unit; @@ -314,24 +317,43 @@ public class EBCLIOptions { Cmd script = parseScriptCmd(arglist); cmdList.add(script); } else { - Optional path = NosqlBenchFiles.findOptionalPath(word, "yaml", "activities"); + Optional 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 arglist) { + private void parseWorkloadYamlCmds(String yamlPath, LinkedList arglist, String scenarioFilter) { + StmtsDocList stmts = StatementsLoader.load(logger, yamlPath); - return null; + Scenarios scenarios = stmts.getDocScenarios(); + + String scenarioName = "default"; + if (scenarioFilter != null){ + scenarioName = scenarioFilter; + } + + List cmds = scenarios.getNamedScenario(scenarioName); + + for (String cmd : cmds) { + // Is there a better way to do this than regex? + parse(cmd.split(" ")); + } + arglist.removeFirst(); } private Map parseLogLevelOverrides(String levelsSpec) { @@ -564,100 +586,100 @@ public class EBCLIOptions { 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 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 cmdArgs) { - this(cmdType, cmdSpec); - this.cmdArgs = cmdArgs; - } + public static class Cmd { + private CmdType cmdType; + private String cmdSpec; + private Map 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 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 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 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(); diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java b/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java index 227f5486d..a53c25fc9 100644 --- a/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java +++ b/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java @@ -187,4 +187,16 @@ public class TestNBCLIOptions { } + @Test + public void cqlIotYamlScenario() { + EBCLIOptions opts = new EBCLIOptions(new String[]{ "scenario-test" }); + List cmds = opts.getCommands(); + } + + @Test + public void cqlIotYamlScenarioSchemaOnly() { + EBCLIOptions opts = new EBCLIOptions(new String[]{ "scenario-test", "stdout"}); + List cmds = opts.getCommands(); + } + } \ No newline at end of file diff --git a/engine-cli/src/test/resources/activities/scenario-test.yaml b/engine-cli/src/test/resources/activities/scenario-test.yaml new file mode 100644 index 000000000..a223b75ce --- /dev/null +++ b/engine-cli/src/test/resources/activities/scenario-test.yaml @@ -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; From b216bc3164a9bda96b173f885de08a9ec3049ff0 Mon Sep 17 00:00:00 2001 From: phact Date: Tue, 17 Mar 2020 12:50:24 -0400 Subject: [PATCH 2/2] error for unknown scenario, handling of TEMPLATE and <<>> variables in run scripts in the yaml --- .../activitytype/cql/core/CqlActivity.java | 6 ++-- .../activities/baselines/cql-iot.yaml | 12 ++++---- .../activitytype/stdout/StdoutActivity.java | 4 +-- ...Interpolater.java => StrInterpolator.java} | 10 +++---- ...aterTest.java => StrInterpolatorTest.java} | 4 +-- .../nosqlbench/engine/cli/EBCLIOptions.java | 29 ++++++++++++++++++- .../engine/cli/EBCLIScriptAssembly.java | 6 ++-- .../engine/cli/TestNBCLIOptions.java | 2 +- 8 files changed, 50 insertions(+), 23 deletions(-) rename engine-api/src/main/java/io/nosqlbench/engine/api/util/{StrInterpolater.java => StrInterpolator.java} (88%) rename engine-api/src/test/java/io/nosqlbench/engine/api/util/{StrInterpolaterTest.java => StrInterpolatorTest.java} (97%) diff --git a/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java b/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java index 185367a47..d1429e250 100644 --- a/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java +++ b/activitytype-cql/src/main/java/io/nosqlbench/activitytype/cql/core/CqlActivity.java @@ -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 blocks = new ArrayList<>(); diff --git a/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml b/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml index f48402ced..fbae0e5af 100644 --- a/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml +++ b/activitytype-cql/src/main/resources/activities/baselines/cql-iot.yaml @@ -1,13 +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 - - run type=cql yaml=baselines/cql-iot tags=phase:rampup cycles=TEMPLATE(cycles,10000000) - - run type=cql yaml=baselines/cql-iot tags=phase:main cycles=TEMPLATE(cycles,10000000) + - 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 - - run type=cql yaml=baselines/cql-iot tags=phase:rampup cycles=TEMPLATE(cycles,10000000) - - run type=cql yaml=baselines/cql-iot tags=phase:main cycles=TEMPLATE(cycles,10000000) + - 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(<>); ToHashedUUID() -> java.util.UUID sensor_name: HashedLineToString('data/variable_words.txt') diff --git a/activitytype-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivity.java b/activitytype-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivity.java index c2155f4d7..5bd1a0fad 100644 --- a/activitytype-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivity.java +++ b/activitytype-stdout/src/main/java/io/nosqlbench/activitytype/stdout/StdoutActivity.java @@ -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"); diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/util/StrInterpolater.java b/engine-api/src/main/java/io/nosqlbench/engine/api/util/StrInterpolator.java similarity index 88% rename from engine-api/src/main/java/io/nosqlbench/engine/api/util/StrInterpolater.java rename to engine-api/src/main/java/io/nosqlbench/engine/api/util/StrInterpolator.java index 03ad8f87a..1ffd86771 100644 --- a/engine-api/src/main/java/io/nosqlbench/engine/api/util/StrInterpolater.java +++ b/engine-api/src/main/java/io/nosqlbench/engine/api/util/StrInterpolator.java @@ -27,23 +27,23 @@ import java.util.List; import java.util.Map; import java.util.function.Function; -public class StrInterpolater implements Function { +public class StrInterpolator implements Function { 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 basicMap) { + public StrInterpolator(Map basicMap) { multimap.add(basicMap); } // for testing - protected StrInterpolater(List> maps) { + protected StrInterpolator(List> maps) { maps.forEach(multimap::add); } @@ -52,7 +52,7 @@ public class StrInterpolater implements Function { return substitutor.replace(substitutor2.replace(s)); } - private static class MultiMap extends StrLookup { + public static class MultiMap extends StrLookup { private List> maps = new ArrayList<>(); private String warnPrefix = "UNSET"; diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/util/StrInterpolaterTest.java b/engine-api/src/test/java/io/nosqlbench/engine/api/util/StrInterpolatorTest.java similarity index 97% rename from engine-api/src/test/java/io/nosqlbench/engine/api/util/StrInterpolaterTest.java rename to engine-api/src/test/java/io/nosqlbench/engine/api/util/StrInterpolatorTest.java index 10c26de0d..2f7b274c5 100644 --- a/engine-api/src/test/java/io/nosqlbench/engine/api/util/StrInterpolaterTest.java +++ b/engine-api/src/test/java/io/nosqlbench/engine/api/util/StrInterpolatorTest.java @@ -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> abcd = new ArrayList>() {{ 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() { diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIOptions.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIOptions.java index c222ced68..a1e72f008 100644 --- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIOptions.java +++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIOptions.java @@ -4,9 +4,13 @@ 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; @@ -321,7 +325,7 @@ public class EBCLIOptions { if(path.isPresent()){ arglist.removeFirst(); String scenarioFilter = null; - if (arglist.size() > 0 && arglist.peekFirst().contains("=")){ + if (arglist.size() > 0 && !arglist.peekFirst().contains("=")){ scenarioFilter = arglist.peekFirst(); arglist.removeFirst(); }; @@ -349,10 +353,33 @@ public class EBCLIOptions { List cmds = scenarios.getNamedScenario(scenarioName); + if (cmds == null){ + List 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 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(); } diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIScriptAssembly.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIScriptAssembly.java index a8684b8a6..147d45665 100644 --- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIScriptAssembly.java +++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/EBCLIScriptAssembly.java @@ -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 EBCLIScriptAssembly { } 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()); } diff --git a/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java b/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java index a53c25fc9..da60c35ed 100644 --- a/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java +++ b/engine-cli/src/test/java/io/nosqlbench/engine/cli/TestNBCLIOptions.java @@ -195,7 +195,7 @@ public class TestNBCLIOptions { @Test public void cqlIotYamlScenarioSchemaOnly() { - EBCLIOptions opts = new EBCLIOptions(new String[]{ "scenario-test", "stdout"}); + EBCLIOptions opts = new EBCLIOptions(new String[]{ "scenario-test", "schema-only"}); List cmds = opts.getCommands(); }