From f158251296894e7a09550e782981a55266952cb6 Mon Sep 17 00:00:00 2001 From: sunrui <983630747@qq.com> Date: Wed, 8 Jun 2022 15:51:31 +0800 Subject: [PATCH] use encodeURIComponent to fix bug of issue #I5B9I7 --- presto-main/src/main/resources/webapp/dist/embedded_plan.js | 2 +- presto-main/src/main/resources/webapp/dist/hetuqueryeditor.js | 2 +- presto-main/src/main/resources/webapp/dist/plan.js | 2 +- presto-main/src/main/resources/webapp/dist/query.js | 2 +- presto-main/src/main/resources/webapp/dist/stage.js | 2 +- .../resources/webapp/src/queryeditor/components/RunsTable.jsx | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/presto-main/src/main/resources/webapp/dist/embedded_plan.js b/presto-main/src/main/resources/webapp/dist/embedded_plan.js index c7c8de5cd..b6add163a 100644 --- a/presto-main/src/main/resources/webapp/dist/embedded_plan.js +++ b/presto-main/src/main/resources/webapp/dist/embedded_plan.js @@ -106,7 +106,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n}); /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QueryHeader = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./utils.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar SinglePressButton = function (_React$Component) {\n _inherits(SinglePressButton, _React$Component);\n\n function SinglePressButton(props) {\n _classCallCheck(this, SinglePressButton);\n\n var _this = _possibleConstructorReturn(this, (SinglePressButton.__proto__ || Object.getPrototypeOf(SinglePressButton)).call(this, props));\n\n _this.state = {\n isButtonDisabled: false,\n uri: _this.props.uri,\n label: _this.props.label\n };\n return _this;\n }\n\n _createClass(SinglePressButton, [{\n key: \"sendRequest\",\n value: function sendRequest() {\n this.setState({\n isButtonDisabled: true\n });\n\n console.log(\"request sent: \" + this.state.uri);\n $.ajax({ url: this.state.uri, type: 'DELETE', complete: function complete() {\n console.log(\"request finished: \" + this.state.uri);this.setState({ isButtonDisabled: false });\n } });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n return _react2.default.createElement(\n \"button\",\n {\n onClick: function onClick() {\n return _this2.sendRequest();\n },\n disabled: this.state.isButtonDisabled,\n className: \"btn btn-warning\",\n target: \"_blank\" },\n this.state.label\n );\n }\n }]);\n\n return SinglePressButton;\n}(_react2.default.Component);\n\nvar QueryHeader = exports.QueryHeader = function (_React$Component2) {\n _inherits(QueryHeader, _React$Component2);\n\n function QueryHeader(props) {\n _classCallCheck(this, QueryHeader);\n\n var _this3 = _possibleConstructorReturn(this, (QueryHeader.__proto__ || Object.getPrototypeOf(QueryHeader)).call(this, props));\n\n _this3.state = { suspendDisabled: false, resumeDisabled: false };\n return _this3;\n }\n\n _createClass(QueryHeader, [{\n key: \"isSuspendable\",\n value: function isSuspendable(query) {\n if (query.state === 'RUNNING') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"isResumable\",\n value: function isResumable(query) {\n if (query.state === 'SUSPENDED') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"renderProgressBar\",\n value: function renderProgressBar() {\n var query = this.props.query;\n var progressBarStyle = { width: (0, _utils.getProgressBarPercentage)(query) + \"%\", backgroundColor: (0, _utils.getQueryStateColor)(query) };\n var showSuspended = this.isSuspendable(query);\n var showResumable = this.isResumable(query);\n\n if ((0, _utils.isQueryEnded)(query)) {\n return _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n );\n }\n\n return _react2.default.createElement(\n \"table\",\n null,\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n { width: \"100%\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/preempted', type: 'PUT', data: \"Preempted via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Preempt\"\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/killed', type: 'PUT', data: \"Killed via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Kill\"\n )\n ),\n /*{\n showSuspended &&\n \n { $.ajax({url: '../v1/query/' + query.queryId + '/suspend', type: 'DELETE', complete: function(){ $('suspendButn').attr(\"disabled\", false)}})}} className=\"btn btn-warning\"\n target=\"_blank\">\n Suspend\n \n \n }\n {\n showResumable &&\n \n { $.ajax({url: '../v1/query/' + query.queryId + '/resume', type: 'DELETE', complete: function(){ $('resumeButn').attr(\"disabled\", false)}})}} className=\"btn btn-warning\"\n target=\"_blank\">\n Resume\n \n \n }*/\n showSuspended && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/suspend', label: \"Suspend\" })\n ),\n showResumable && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/resume', label: \"Resume\" })\n )\n )\n )\n );\n }\n }, {\n key: \"renderTab\",\n value: function renderTab(path, name) {\n var queryId = this.props.query.queryId;\n if (window.location.pathname.includes(path)) {\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn nav-disabled\" },\n name\n );\n }\n\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn\" },\n name\n );\n }\n }, {\n key: \"render\",\n value: function render() {\n var query = this.props.query;\n return _react2.default.createElement(\n \"div\",\n null,\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"h3\",\n { className: \"query-id\" },\n _react2.default.createElement(\n \"span\",\n null,\n \"Query Detail: \"\n ),\n _react2.default.createElement(\n \"span\",\n { id: \"query-id\" },\n query.queryId\n ),\n _react2.default.createElement(\n \"a\",\n { className: \"btn copy-button\", \"data-clipboard-target\": \"#query-id\", \"data-toggle\": \"tooltip\", \"data-placement\": \"right\", title: \"Copy to clipboard\" },\n _react2.default.createElement(\"span\", { className: \"glyphicon glyphicon-copy\", \"aria-hidden\": \"true\", alt: \"Copy to clipboard\" })\n )\n )\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"table\",\n { className: \"header-inline-links\" },\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n null,\n this.renderTab(\"query.html\", \"Overview\"),\n \"\\xA0\",\n this.renderTab(\"plan.html\", \"Live Plan\"),\n \"\\xA0\",\n this.renderTab(\"stage.html\", \"Stage Performance\"),\n \"\\xA0\",\n this.renderTab(\"timeline.html\", \"Splits\"),\n \"\\xA0\",\n _react2.default.createElement(\n \"a\",\n { href: \"../v1/query/\" + query.queryId + \"?pretty\", className: \"btn btn-info navbar-btn\", target: \"_blank\" },\n \"JSON\"\n )\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\"hr\", { className: \"h2-hr\" }),\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-12\" },\n this.renderProgressBar()\n )\n )\n );\n }\n }]);\n\n return QueryHeader;\n}(_react2.default.Component);\n\n//# sourceURL=webpack:///./components/QueryHeader.jsx?"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QueryHeader = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./utils.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar SinglePressButton = function (_React$Component) {\n _inherits(SinglePressButton, _React$Component);\n\n function SinglePressButton(props) {\n _classCallCheck(this, SinglePressButton);\n\n var _this = _possibleConstructorReturn(this, (SinglePressButton.__proto__ || Object.getPrototypeOf(SinglePressButton)).call(this, props));\n\n _this.state = {\n isButtonDisabled: false,\n uri: _this.props.uri,\n label: _this.props.label\n };\n return _this;\n }\n\n _createClass(SinglePressButton, [{\n key: \"sendRequest\",\n value: function sendRequest() {\n this.setState({\n isButtonDisabled: true\n });\n\n $.ajax({ url: this.state.uri, type: 'DELETE', complete: function complete() {\n this.setState({ isButtonDisabled: false });\n } });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n return _react2.default.createElement(\n \"button\",\n {\n onClick: function onClick() {\n return _this2.sendRequest();\n },\n disabled: this.state.isButtonDisabled,\n className: \"btn btn-warning\",\n target: \"_blank\" },\n this.state.label\n );\n }\n }]);\n\n return SinglePressButton;\n}(_react2.default.Component);\n\nvar QueryHeader = exports.QueryHeader = function (_React$Component2) {\n _inherits(QueryHeader, _React$Component2);\n\n function QueryHeader(props) {\n _classCallCheck(this, QueryHeader);\n\n var _this3 = _possibleConstructorReturn(this, (QueryHeader.__proto__ || Object.getPrototypeOf(QueryHeader)).call(this, props));\n\n _this3.state = { suspendDisabled: false, resumeDisabled: false };\n return _this3;\n }\n\n _createClass(QueryHeader, [{\n key: \"isSuspendable\",\n value: function isSuspendable(query) {\n if (query.state === 'RUNNING') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"isResumable\",\n value: function isResumable(query) {\n if (query.state === 'SUSPENDED') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"renderProgressBar\",\n value: function renderProgressBar() {\n var query = this.props.query;\n var progressBarStyle = { width: (0, _utils.getProgressBarPercentage)(query) + \"%\", backgroundColor: (0, _utils.getQueryStateColor)(query) };\n var showSuspended = this.isSuspendable(query);\n var showResumable = this.isResumable(query);\n\n if ((0, _utils.isQueryEnded)(query)) {\n return _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n );\n }\n\n return _react2.default.createElement(\n \"table\",\n null,\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n { width: \"100%\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/preempted', type: 'PUT', data: \"Preempted via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Preempt\"\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/killed', type: 'PUT', data: \"Killed via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Kill\"\n )\n ),\n showSuspended && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/suspend', label: \"Suspend\" })\n ),\n showResumable && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/resume', label: \"Resume\" })\n )\n )\n )\n );\n }\n }, {\n key: \"renderTab\",\n value: function renderTab(path, name) {\n var queryId = this.props.query.queryId;\n if (window.location.pathname.includes(path)) {\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn nav-disabled\" },\n name\n );\n }\n\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn\" },\n name\n );\n }\n }, {\n key: \"render\",\n value: function render() {\n var query = this.props.query;\n return _react2.default.createElement(\n \"div\",\n null,\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"h3\",\n { className: \"query-id\" },\n _react2.default.createElement(\n \"span\",\n null,\n \"Query Detail: \"\n ),\n _react2.default.createElement(\n \"span\",\n { id: \"query-id\" },\n query.queryId\n ),\n _react2.default.createElement(\n \"a\",\n { className: \"btn copy-button\", \"data-clipboard-target\": \"#query-id\", \"data-toggle\": \"tooltip\", \"data-placement\": \"right\", title: \"Copy to clipboard\" },\n _react2.default.createElement(\"span\", { className: \"glyphicon glyphicon-copy\", \"aria-hidden\": \"true\", alt: \"Copy to clipboard\" })\n )\n )\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"table\",\n { className: \"header-inline-links\" },\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n null,\n this.renderTab(\"query.html\", \"Overview\"),\n \"\\xA0\",\n this.renderTab(\"plan.html\", \"Live Plan\"),\n \"\\xA0\",\n this.renderTab(\"stage.html\", \"Stage Performance\"),\n \"\\xA0\",\n this.renderTab(\"timeline.html\", \"Splits\"),\n \"\\xA0\",\n _react2.default.createElement(\n \"a\",\n { href: \"../v1/query/\" + query.queryId + \"?pretty\", className: \"btn btn-info navbar-btn\", target: \"_blank\" },\n \"JSON\"\n )\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\"hr\", { className: \"h2-hr\" }),\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-12\" },\n this.renderProgressBar()\n )\n )\n );\n }\n }]);\n\n return QueryHeader;\n}(_react2.default.Component);\n\n//# sourceURL=webpack:///./components/QueryHeader.jsx?"); /***/ }), diff --git a/presto-main/src/main/resources/webapp/dist/hetuqueryeditor.js b/presto-main/src/main/resources/webapp/dist/hetuqueryeditor.js index 68e873332..8e50e098f 100644 --- a/presto-main/src/main/resources/webapp/dist/hetuqueryeditor.js +++ b/presto-main/src/main/resources/webapp/dist/hetuqueryeditor.js @@ -32668,7 +32668,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactMoment = __webpack_require__(/*! react-moment */ \"./node_modules/react-moment/dist/index.js\");\n\nvar _reactMoment2 = _interopRequireDefault(_reactMoment);\n\n__webpack_require__(/*! moment-timezone */ \"./node_modules/moment-timezone/index.js\");\n\nvar _QueryActions = __webpack_require__(/*! ../actions/QueryActions */ \"./queryeditor/actions/QueryActions.js\");\n\nvar _QueryActions2 = _interopRequireDefault(_QueryActions);\n\nvar _ResultsPreviewActions = __webpack_require__(/*! ../actions/ResultsPreviewActions */ \"./queryeditor/actions/ResultsPreviewActions.js\");\n\nvar _ResultsPreviewActions2 = _interopRequireDefault(_ResultsPreviewActions);\n\nvar _RunActions = __webpack_require__(/*! ../actions/RunActions */ \"./queryeditor/actions/RunActions.js\");\n\nvar _RunActions2 = _interopRequireDefault(_RunActions);\n\nvar _TabActions = __webpack_require__(/*! ../actions/TabActions */ \"./queryeditor/actions/TabActions.js\");\n\nvar _TabActions2 = _interopRequireDefault(_TabActions);\n\nvar _TableActions = __webpack_require__(/*! ../actions/TableActions */ \"./queryeditor/actions/TableActions.js\");\n\nvar _TableActions2 = _interopRequireDefault(_TableActions);\n\nvar _TabConstants = __webpack_require__(/*! ../constants/TabConstants */ \"./queryeditor/constants/TabConstants.js\");\n\nvar _TabConstants2 = _interopRequireDefault(_TabConstants);\n\nvar _RunStateConstants = __webpack_require__(/*! ../constants/RunStateConstants */ \"./queryeditor/constants/RunStateConstants.js\");\n\nvar _RunStateConstants2 = _interopRequireDefault(_RunStateConstants);\n\nvar _RunStore = __webpack_require__(/*! ../stores/RunStore */ \"./queryeditor/stores/RunStore.js\");\n\nvar _RunStore2 = _interopRequireDefault(_RunStore);\n\nvar _fixedDataTable = __webpack_require__(/*! fixed-data-table-2 */ \"./node_modules/fixed-data-table-2/main.js\");\n\nvar _ProgressBar = __webpack_require__(/*! ./ProgressBar */ \"./queryeditor/components/ProgressBar.jsx\");\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _ModalDialog = __webpack_require__(/*! ./ModalDialog */ \"./queryeditor/components/ModalDialog.jsx\");\n\nvar _ModalDialog2 = _interopRequireDefault(_ModalDialog);\n\nvar _UserStore = __webpack_require__(/*! ../stores/UserStore */ \"./queryeditor/stores/UserStore.js\");\n\nvar _UserStore2 = _interopRequireDefault(_UserStore);\n\nvar _CollectionActions = __webpack_require__(/*! ../actions/CollectionActions */ \"./queryeditor/actions/CollectionActions.js\");\n\nvar _CollectionActions2 = _interopRequireDefault(_CollectionActions);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nvar classNames = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\nvar isColumnResizing = false;\nvar columnWidths = {\n user: 90,\n context: 150,\n query: 460,\n status: 90,\n started: 180,\n duration: 80,\n output: 150,\n addtocollection: 120\n};\nvar metaStoreType = '';\n\n// State actions\nfunction getRuns(user) {\n if (user) {\n return _RunStore2.default.getCollection().where({\n user: user\n }, {\n sort: true\n });\n } else {\n return _RunStore2.default.getCollection().all({\n sort: true\n });\n }\n}\n\nvar RunsTable = function (_React$Component) {\n _inherits(RunsTable, _React$Component);\n\n function RunsTable(props) {\n _classCallCheck(this, RunsTable);\n\n var _this = _possibleConstructorReturn(this, (RunsTable.__proto__ || Object.getPrototypeOf(RunsTable)).call(this, props));\n\n _this.state = {\n currentErrorMessage: null,\n showModal: false,\n runs: getRuns(_this.props.user),\n user: _UserStore2.default.getCurrentUser(),\n isCollected: []\n };\n _this.getStateFromStore = _this.getStateFromStore.bind(_this);\n _this._onChange = _this._onChange.bind(_this);\n _this.onColumnResizeEndCallback = _this.onColumnResizeEndCallback.bind(_this);\n _this.renderEmptyMessage = _this.renderEmptyMessage.bind(_this);\n _this.renderModalDialog = _this.renderModalDialog.bind(_this);\n _this.renderErrorDialogFooter = _this.renderErrorDialogFooter.bind(_this);\n _this.rowGetter = _this.rowGetter.bind(_this);\n _this.columnGetter = _this.columnGetter.bind(_this);\n _this.handleCollection = _this.handleCollection.bind(_this);\n return _this;\n }\n\n _createClass(RunsTable, [{\n key: 'getStateFromStore',\n value: function getStateFromStore() {\n return {\n currentErrorMessage: this.state.currentErrorMessage,\n showModal: this.state.showModal,\n runs: getRuns(this.props.user),\n user: _UserStore2.default.getCurrentUser()\n };\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n $.get('../v1/query/hetuMetastoreType', function (type) {\n metaStoreType = type;\n this.setState();\n }.bind(this));\n\n _UserStore2.default.listen(this._onChange);\n _RunStore2.default.listen(this._onChange);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _RunStore2.default.unlisten(this._onChange);\n }\n }, {\n key: 'renderErrorDialogFooter',\n value: function renderErrorDialogFooter() {\n return _react2.default.createElement(\n 'div',\n { className: \"catalog-btn-part\" },\n _react2.default.createElement(\n 'button',\n { className: \"btn btn-success active\", style: { padding: \"6px 12px\", color: \"#ffffff\" }, onClick: toggleModal.bind(null, this, null) },\n 'Close'\n )\n );\n }\n }, {\n key: 'renderModalDialog',\n value: function renderModalDialog() {\n if (!this.state.showModal) {\n return null;\n }\n return _react2.default.createElement(\n _ModalDialog2.default,\n { onClose: toggleModal.bind(null, this, null), header: _react2.default.createElement(\n 'div',\n { style: { color: \"#ff0000\" } },\n 'Query Error'\n ),\n footer: this.renderErrorDialogFooter(),\n show: this.state.showModal },\n _react2.default.createElement(\n 'div',\n { style: { backgroundColor: '#f5f5f5', border: '1px solid #ccc', borderRadius: '4px', color: '#333', padding: \"15px\", margin: \"30px\", maxHeight: '300px', overflow: 'auto' } },\n this.state.currentErrorMessage\n )\n );\n }\n }, {\n key: 'handleCollection',\n value: function handleCollection(e) {\n this.setState({\n isCollected: isCollected\n });\n if (this.state.isCollected) {\n // delete\n } else {\n _CollectionActions2.default.addToCollection();\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var CollectionButton = function CollectionButton(_ref) {\n var isCollected = _ref.isCollected;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n isCollected ? _react2.default.createElement(\n 'button',\n { className: 'collection-btn', onClick: _this2.handleCollection },\n _react2.default.createElement('i', { className: 'icon fa fa-star' })\n ) : _react2.default.createElement(\n 'button',\n { className: 'collection-btn', onClick: _this2.handleCollection },\n _react2.default.createElement('i', { className: 'icon fa fa-star-o' })\n )\n );\n };\n\n if (this.state.runs.length === 0) {\n return this.renderEmptyMessage();\n }\n\n // Need to make sure to wrap `Table` in a parent element so we can\n // compute the natural width of the component.\n return _react2.default.createElement(\n 'div',\n { className: 'flex hetu-table' },\n this.renderModalDialog(),\n _react2.default.createElement(\n _fixedDataTable.Table,\n {\n rowHeight: 50,\n rowsCount: this.state.runs.length,\n width: this.props.tableWidth,\n height: this.props.tableHeight,\n headerHeight: 30 },\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'User'\n ),\n cell: function cell(_ref2) {\n var rowIndex = _ref2.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('user', rowIndex)\n );\n },\n width: columnWidths.user\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Context'\n ),\n cell: function cell(_ref3) {\n var rowIndex = _ref3.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('context', rowIndex)\n );\n },\n width: columnWidths.context\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Query'\n ),\n cell: function cell(_ref4) {\n var rowIndex = _ref4.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('query', rowIndex)\n );\n },\n width: columnWidths.query\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Status'\n ),\n cell: function cell(_ref5) {\n var rowIndex = _ref5.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('status', rowIndex)\n );\n },\n width: columnWidths.status\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Started'\n ),\n cell: function cell(_ref6) {\n var rowIndex = _ref6.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('started', rowIndex)\n );\n },\n width: columnWidths.started\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Duration'\n ),\n cell: function cell(_ref7) {\n var rowIndex = _ref7.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('duration', rowIndex)\n );\n },\n width: columnWidths.duration\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Output'\n ),\n cell: function cell(_ref8) {\n var rowIndex = _ref8.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('output', rowIndex)\n );\n },\n width: columnWidths.output\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Collect'\n ),\n cell: function cell(_ref9) {\n var rowIndex = _ref9.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('collect', rowIndex)\n );\n },\n width: columnWidths.addtocollection\n })\n )\n );\n }\n }, {\n key: 'onColumnResizeEndCallback',\n value: function onColumnResizeEndCallback(newColumnWidth, dataKey) {\n columnWidths[dataKey] = newColumnWidth;\n isColumnResizing = false;\n this.forceUpdate(); // TODO: move to store + state\n }\n }, {\n key: 'columnGetter',\n value: function columnGetter(key, rowIndex) {\n var row = this.rowGetter(rowIndex);\n if (\"user\" == key) {\n return CellRenderers.user(row.user);\n } else if (\"context\" == key) {\n return CellRenderers.context(row.context);\n } else if (\"query\" == key) {\n return CellRenderers.query(row.query, row.context);\n } else if (\"status\" == key) {\n return CellRenderers.status(\"\", \"status\", row);\n } else if (\"started\" == key) {\n return CellRenderers.started(row.started);\n } else if (\"duration\" == key) {\n return row.duration;\n } else if (\"output\" == key) {\n return CellRenderers.output(row.output, \"output\", row, this);\n } else if (\"collect\" == key) {\n return CellRenderers.collect(row.context, row.query, rowIndex, this);\n }\n }\n }, {\n key: 'rowGetter',\n value: function rowGetter(rowIndex) {\n //Show latest on top\n var descIndex = this.state.runs.length - rowIndex - 1;\n this.state.isCollected.push(0);\n return formatRun(this.state.runs[descIndex], this.state.user);\n }\n }, {\n key: 'renderEmptyMessage',\n value: function renderEmptyMessage() {\n return _react2.default.createElement(\n 'p',\n { className: 'info panel-body text-light text-center' },\n 'No queries to show'\n );\n }\n\n /* Store events */\n\n }, {\n key: '_onChange',\n value: function _onChange() {\n this.setState(this.getStateFromStore());\n }\n }]);\n\n return RunsTable;\n}(_react2.default.Component);\n\nfunction formatRun(run, currentUser) {\n if (!run) return;\n return {\n user: run.user,\n context: run.sessionContext,\n query: run.query,\n status: run.state,\n infoUri: run.infoUri,\n started: run.queryStarted,\n duration: run.queryStats && run.queryStats.elapsedTime,\n output: run.output && run.output,\n _run: run,\n _currentUser: currentUser\n };\n}\n\nfunction selectQuery(query, sessionContext, e) {\n e.preventDefault();\n _QueryActions2.default.selectQuery({ query: query, sessionContext: sessionContext });\n}\n\nfunction selectTable(table, e) {\n e.preventDefault();\n _TableActions2.default.addTable({\n name: table\n });\n _TableActions2.default.selectTable(table);\n _TabActions2.default.selectTab(_TabConstants2.default.DATA_PREVIEW);\n}\n\nfunction previewQueryResult(file, query, e) {\n var pageNum = 1;\n var pageSize = 10;\n e.preventDefault();\n _ResultsPreviewActions2.default.selectPreviewQuery(query);\n _ResultsPreviewActions2.default.loadResultsPreview(file, pageNum, pageSize);\n _TabActions2.default.selectTab(_TabConstants2.default.RESULTS_PREVIEW);\n}\n\nfunction killRun(uuid) {\n _RunActions2.default.kill(uuid);\n}\n\nfunction toggleModal(component) {\n var msg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n var state = component.state;\n if (!state.showModal) {\n state.currentErrorMessage = msg;\n state.showModal = true;\n } else {\n state.currentErrorMessage = null;\n state.showModal = false;\n }\n component.setState(state);\n}\n\nfunction handleCollection(e, rowIndex, parentObj) {\n var queryText = e.query;\n if (queryText.length > 1000) {\n alert(\"Error! Your SQL statement is too long! Please shorten it!\");\n } else if (metaStoreType != \"jdbc\") {\n alert(\"Collection failed! Only hetu-metastore storage type configured as JDBC is supported!\");\n } else {\n var catalog = e.sessionContext.catalog;\n var schema = e.sessionContext.schema;\n var state = parentObj.state;\n if (state.isCollected[rowIndex] == 0) {\n state.isCollected[rowIndex] = 1;\n _CollectionActions2.default.addToCollection(queryText, catalog, schema);\n } else {\n state.isCollected[rowIndex] = 0;\n _CollectionActions2.default.deleteCollection(queryText, catalog, schema);\n }\n parentObj.setState(state);\n }\n}\n\nfunction handleDelete(e) {\n var queryText = e.query;\n var catalog = e.sessionContext.catalog;\n var schema = e.sessionContext.schema;\n _CollectionActions2.default.deleteCollection(queryText, catalog, schema);\n}\n\nvar CellRenderers = {\n user: function user(cellData) {\n return _react2.default.createElement(\n 'span',\n { title: cellData },\n cellData\n );\n },\n context: function context(sessionContext) {\n var contextTitle = \"Catalog: \" + sessionContext.catalog + \"\\nSchema: \" + sessionContext.schema + \"\\n\";\n contextTitle += \"Properties: \\n\";\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = Object.entries(sessionContext.properties)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _ref10 = _step.value;\n\n var _ref11 = _slicedToArray(_ref10, 2);\n\n var key = _ref11[0];\n var value = _ref11[1];\n\n contextTitle += \" \" + key + \" = \" + value;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return _react2.default.createElement(\n 'span',\n { title: contextTitle },\n sessionContext.catalog + \".\" + sessionContext.schema\n );\n },\n query: function query(_query, sessionContext) {\n return _react2.default.createElement(\n 'a',\n { href: '#', onClick: selectQuery.bind(null, _query, sessionContext) },\n _react2.default.createElement(\n 'code',\n { title: _query },\n _query\n )\n );\n },\n status: function status(cellData, cellDataKey, rowData) {\n var run = rowData._run;\n var link = run.infoUri != null && run.infoUri != \"\" ? run.infoUri : \"#\";\n if (run.state === _RunStateConstants2.default.FAILED) {\n return _react2.default.createElement(\n 'span',\n null,\n _react2.default.createElement(\n 'span',\n { className: 'label label-danger', style: { minWidth: \"61px\" } },\n _react2.default.createElement(\n 'a',\n { href: link, target: '_blank' },\n 'FAILED'\n )\n ),\n _react2.default.createElement(\n 'a',\n { href: '#', title: 'Queries may fail or be cancelled if they exceed configured resources limits.This includes limits on memory consumption and result file size' },\n _react2.default.createElement('i', { className: 'fa fa-info', style: { top: '3px', color: '#d5534f', marginLeft: '5px' } })\n )\n );\n } else if (run.state === _RunStateConstants2.default.FINISHED) {\n return _react2.default.createElement(\n 'span',\n { className: 'label label-success', style: { minWidth: \"61px\" } },\n _react2.default.createElement(\n 'a',\n { href: link, target: '_blank' },\n run.state\n )\n );\n } else if (run.state === _RunStateConstants2.default.QUEUED) {\n return _react2.default.createElement(\n 'span',\n { className: 'label label-default', style: { minWidth: \"61px\" } },\n _react2.default.createElement(\n 'a',\n { href: link, target: '_blank' },\n run.state\n )\n );\n } else {\n return _react2.default.createElement(\n 'span',\n { className: 'label label-info', style: { minWidth: \"61px\" } },\n _react2.default.createElement(\n 'a',\n { href: link, target: '_blank' },\n run.state\n )\n );\n }\n },\n output: function output(cellData, cellDataKey, rowData, parentObj) {\n var run = rowData._run;\n var currentUser = rowData._currentUser;\n var killable = currentUser && currentUser.name === run.user;\n var output = cellData;\n if (output && output.location && run.state !== _RunStateConstants2.default.FAILED) {\n //Support relative URLs\n if (output.location[0] === '/' || output.location.indexOf('http') != -1 || output.location.indexOf('..') == 0) {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'a',\n { href: output.location, target: '_blank', className: 'btn' },\n 'Download CSV',\n _react2.default.createElement('i', { className: 'glyphicon glyphicon-download' })\n ),\n _react2.default.createElement(\n 'a',\n {\n href: '#',\n onClick: previewQueryResult.bind(null, output.location, {\n query: run.query,\n sessionContext: run.sessionContext\n }),\n className: 'btn' },\n 'Preview Results'\n )\n );\n } else {\n return _react2.default.createElement(\n 'a',\n { href: '#', onClick: selectTable.bind(null, output.location) },\n _react2.default.createElement(\n 'code',\n { title: output.location },\n output.location\n )\n );\n }\n } else if (run.state === 'RUNNING' || run.state === _RunStateConstants2.default.QUEUED || run.state === _RunStateConstants2.default.RESCHEDULING || run.state === _RunStateConstants2.default.RESUMING) {\n var progressFromStats = getProgressFromStats(run.queryStats);\n return _react2.default.createElement(\n 'div',\n { className: classNames({\n 'runs-table-progress': true,\n 'runs-table-progress-killable': killable\n }) },\n _react2.default.createElement(_ProgressBar2.default, { progress: progressFromStats }),\n killable ? _react2.default.createElement('span', { className: 'glyphicon glyphicon-remove text-danger',\n title: 'Kill query',\n onClick: killRun.bind(null, run.uuid) }) : null\n );\n\n // XXX this needs to be a modal...we can use a custom modal here or something experimental\n } else if (run.state === _RunStateConstants2.default.FAILED) {\n var message = run.error != undefined ? run.error.message : \"Unknown\";\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'button',\n { className: \"btn btn-error\",\n onClick: toggleModal.bind(null, parentObj, message) },\n 'Query ERROR'\n )\n );\n }\n },\n started: function started(cellData) {\n return _react2.default.createElement(\n _reactMoment2.default,\n { utc: true, local: true },\n cellData\n );\n },\n collect: function collect(sessionContext, query, rowIndex, parentObj) {\n var collection = { sessionContext: sessionContext, query: query };\n var descIndex = parentObj.state.runs.length - rowIndex - 1;\n return _react2.default.createElement(\n 'span',\n null,\n _react2.default.createElement(\n 'button',\n { className: 'collection-btn', onClick: function onClick() {\n handleCollection(collection, descIndex, parentObj);\n } },\n _react2.default.createElement('i', { className: 'icon-center fa fa-plus icon' }),\n _react2.default.createElement('i', { className: 'icon-center fa fa-star icon' })\n )\n );\n }\n};\n\nfunction getProgressFromStats(stats) {\n if (!stats || !stats.progressPercentage) {\n return 0.0;\n } else {\n return stats.progressPercentage;\n }\n}\n\nexports.default = RunsTable;\n\n//# sourceURL=webpack:///./queryeditor/components/RunsTable.jsx?"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactMoment = __webpack_require__(/*! react-moment */ \"./node_modules/react-moment/dist/index.js\");\n\nvar _reactMoment2 = _interopRequireDefault(_reactMoment);\n\n__webpack_require__(/*! moment-timezone */ \"./node_modules/moment-timezone/index.js\");\n\nvar _QueryActions = __webpack_require__(/*! ../actions/QueryActions */ \"./queryeditor/actions/QueryActions.js\");\n\nvar _QueryActions2 = _interopRequireDefault(_QueryActions);\n\nvar _ResultsPreviewActions = __webpack_require__(/*! ../actions/ResultsPreviewActions */ \"./queryeditor/actions/ResultsPreviewActions.js\");\n\nvar _ResultsPreviewActions2 = _interopRequireDefault(_ResultsPreviewActions);\n\nvar _RunActions = __webpack_require__(/*! ../actions/RunActions */ \"./queryeditor/actions/RunActions.js\");\n\nvar _RunActions2 = _interopRequireDefault(_RunActions);\n\nvar _TabActions = __webpack_require__(/*! ../actions/TabActions */ \"./queryeditor/actions/TabActions.js\");\n\nvar _TabActions2 = _interopRequireDefault(_TabActions);\n\nvar _TableActions = __webpack_require__(/*! ../actions/TableActions */ \"./queryeditor/actions/TableActions.js\");\n\nvar _TableActions2 = _interopRequireDefault(_TableActions);\n\nvar _TabConstants = __webpack_require__(/*! ../constants/TabConstants */ \"./queryeditor/constants/TabConstants.js\");\n\nvar _TabConstants2 = _interopRequireDefault(_TabConstants);\n\nvar _RunStateConstants = __webpack_require__(/*! ../constants/RunStateConstants */ \"./queryeditor/constants/RunStateConstants.js\");\n\nvar _RunStateConstants2 = _interopRequireDefault(_RunStateConstants);\n\nvar _RunStore = __webpack_require__(/*! ../stores/RunStore */ \"./queryeditor/stores/RunStore.js\");\n\nvar _RunStore2 = _interopRequireDefault(_RunStore);\n\nvar _fixedDataTable = __webpack_require__(/*! fixed-data-table-2 */ \"./node_modules/fixed-data-table-2/main.js\");\n\nvar _ProgressBar = __webpack_require__(/*! ./ProgressBar */ \"./queryeditor/components/ProgressBar.jsx\");\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _ModalDialog = __webpack_require__(/*! ./ModalDialog */ \"./queryeditor/components/ModalDialog.jsx\");\n\nvar _ModalDialog2 = _interopRequireDefault(_ModalDialog);\n\nvar _UserStore = __webpack_require__(/*! ../stores/UserStore */ \"./queryeditor/stores/UserStore.js\");\n\nvar _UserStore2 = _interopRequireDefault(_UserStore);\n\nvar _CollectionActions = __webpack_require__(/*! ../actions/CollectionActions */ \"./queryeditor/actions/CollectionActions.js\");\n\nvar _CollectionActions2 = _interopRequireDefault(_CollectionActions);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nvar classNames = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\nvar isColumnResizing = false;\nvar columnWidths = {\n user: 90,\n context: 150,\n query: 460,\n status: 90,\n started: 180,\n duration: 80,\n output: 150,\n addtocollection: 120\n};\nvar metaStoreType = '';\n\n// State actions\nfunction getRuns(user) {\n if (user) {\n return _RunStore2.default.getCollection().where({\n user: user\n }, {\n sort: true\n });\n } else {\n return _RunStore2.default.getCollection().all({\n sort: true\n });\n }\n}\n\nvar RunsTable = function (_React$Component) {\n _inherits(RunsTable, _React$Component);\n\n function RunsTable(props) {\n _classCallCheck(this, RunsTable);\n\n var _this = _possibleConstructorReturn(this, (RunsTable.__proto__ || Object.getPrototypeOf(RunsTable)).call(this, props));\n\n _this.state = {\n currentErrorMessage: null,\n showModal: false,\n runs: getRuns(_this.props.user),\n user: _UserStore2.default.getCurrentUser(),\n isCollected: []\n };\n _this.getStateFromStore = _this.getStateFromStore.bind(_this);\n _this._onChange = _this._onChange.bind(_this);\n _this.onColumnResizeEndCallback = _this.onColumnResizeEndCallback.bind(_this);\n _this.renderEmptyMessage = _this.renderEmptyMessage.bind(_this);\n _this.renderModalDialog = _this.renderModalDialog.bind(_this);\n _this.renderErrorDialogFooter = _this.renderErrorDialogFooter.bind(_this);\n _this.rowGetter = _this.rowGetter.bind(_this);\n _this.columnGetter = _this.columnGetter.bind(_this);\n _this.handleCollection = _this.handleCollection.bind(_this);\n return _this;\n }\n\n _createClass(RunsTable, [{\n key: 'getStateFromStore',\n value: function getStateFromStore() {\n return {\n currentErrorMessage: this.state.currentErrorMessage,\n showModal: this.state.showModal,\n runs: getRuns(this.props.user),\n user: _UserStore2.default.getCurrentUser()\n };\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n $.get('../v1/query/hetuMetastoreType', function (type) {\n metaStoreType = type;\n this.setState();\n }.bind(this));\n\n _UserStore2.default.listen(this._onChange);\n _RunStore2.default.listen(this._onChange);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _RunStore2.default.unlisten(this._onChange);\n }\n }, {\n key: 'renderErrorDialogFooter',\n value: function renderErrorDialogFooter() {\n return _react2.default.createElement(\n 'div',\n { className: \"catalog-btn-part\" },\n _react2.default.createElement(\n 'button',\n { className: \"btn btn-success active\", style: { padding: \"6px 12px\", color: \"#ffffff\" }, onClick: toggleModal.bind(null, this, null) },\n 'Close'\n )\n );\n }\n }, {\n key: 'renderModalDialog',\n value: function renderModalDialog() {\n if (!this.state.showModal) {\n return null;\n }\n return _react2.default.createElement(\n _ModalDialog2.default,\n { onClose: toggleModal.bind(null, this, null), header: _react2.default.createElement(\n 'div',\n { style: { color: \"#ff0000\" } },\n 'Query Error'\n ),\n footer: this.renderErrorDialogFooter(),\n show: this.state.showModal },\n _react2.default.createElement(\n 'div',\n { style: { backgroundColor: '#f5f5f5', border: '1px solid #ccc', borderRadius: '4px', color: '#333', padding: \"15px\", margin: \"30px\", maxHeight: '300px', overflow: 'auto' } },\n this.state.currentErrorMessage\n )\n );\n }\n }, {\n key: 'handleCollection',\n value: function handleCollection(e) {\n this.setState({\n isCollected: isCollected\n });\n if (this.state.isCollected) {\n // delete\n } else {\n _CollectionActions2.default.addToCollection();\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var CollectionButton = function CollectionButton(_ref) {\n var isCollected = _ref.isCollected;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n isCollected ? _react2.default.createElement(\n 'button',\n { className: 'collection-btn', onClick: _this2.handleCollection },\n _react2.default.createElement('i', { className: 'icon fa fa-star' })\n ) : _react2.default.createElement(\n 'button',\n { className: 'collection-btn', onClick: _this2.handleCollection },\n _react2.default.createElement('i', { className: 'icon fa fa-star-o' })\n )\n );\n };\n\n if (this.state.runs.length === 0) {\n return this.renderEmptyMessage();\n }\n\n // Need to make sure to wrap `Table` in a parent element so we can\n // compute the natural width of the component.\n return _react2.default.createElement(\n 'div',\n { className: 'flex hetu-table' },\n this.renderModalDialog(),\n _react2.default.createElement(\n _fixedDataTable.Table,\n {\n rowHeight: 50,\n rowsCount: this.state.runs.length,\n width: this.props.tableWidth,\n height: this.props.tableHeight,\n headerHeight: 30 },\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'User'\n ),\n cell: function cell(_ref2) {\n var rowIndex = _ref2.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('user', rowIndex)\n );\n },\n width: columnWidths.user\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Context'\n ),\n cell: function cell(_ref3) {\n var rowIndex = _ref3.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('context', rowIndex)\n );\n },\n width: columnWidths.context\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Query'\n ),\n cell: function cell(_ref4) {\n var rowIndex = _ref4.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('query', rowIndex)\n );\n },\n width: columnWidths.query\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Status'\n ),\n cell: function cell(_ref5) {\n var rowIndex = _ref5.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('status', rowIndex)\n );\n },\n width: columnWidths.status\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Started'\n ),\n cell: function cell(_ref6) {\n var rowIndex = _ref6.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('started', rowIndex)\n );\n },\n width: columnWidths.started\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Duration'\n ),\n cell: function cell(_ref7) {\n var rowIndex = _ref7.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('duration', rowIndex)\n );\n },\n width: columnWidths.duration\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Output'\n ),\n cell: function cell(_ref8) {\n var rowIndex = _ref8.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('output', rowIndex)\n );\n },\n width: columnWidths.output\n }),\n _react2.default.createElement(_fixedDataTable.Column, {\n header: _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n 'Collect'\n ),\n cell: function cell(_ref9) {\n var rowIndex = _ref9.rowIndex;\n return _react2.default.createElement(\n _fixedDataTable.Cell,\n null,\n ' ',\n _this2.columnGetter('collect', rowIndex)\n );\n },\n width: columnWidths.addtocollection\n })\n )\n );\n }\n }, {\n key: 'onColumnResizeEndCallback',\n value: function onColumnResizeEndCallback(newColumnWidth, dataKey) {\n columnWidths[dataKey] = newColumnWidth;\n isColumnResizing = false;\n this.forceUpdate(); // TODO: move to store + state\n }\n }, {\n key: 'columnGetter',\n value: function columnGetter(key, rowIndex) {\n var row = this.rowGetter(rowIndex);\n if (\"user\" == key) {\n return CellRenderers.user(row.user);\n } else if (\"context\" == key) {\n return CellRenderers.context(row.context);\n } else if (\"query\" == key) {\n return CellRenderers.query(row.query, row.context);\n } else if (\"status\" == key) {\n return CellRenderers.status(\"\", \"status\", row);\n } else if (\"started\" == key) {\n return CellRenderers.started(row.started);\n } else if (\"duration\" == key) {\n return row.duration;\n } else if (\"output\" == key) {\n return CellRenderers.output(row.output, \"output\", row, this);\n } else if (\"collect\" == key) {\n return CellRenderers.collect(row.context, row.query, rowIndex, this);\n }\n }\n }, {\n key: 'rowGetter',\n value: function rowGetter(rowIndex) {\n //Show latest on top\n var descIndex = this.state.runs.length - rowIndex - 1;\n this.state.isCollected.push(0);\n return formatRun(this.state.runs[descIndex], this.state.user);\n }\n }, {\n key: 'renderEmptyMessage',\n value: function renderEmptyMessage() {\n return _react2.default.createElement(\n 'p',\n { className: 'info panel-body text-light text-center' },\n 'No queries to show'\n );\n }\n\n /* Store events */\n\n }, {\n key: '_onChange',\n value: function _onChange() {\n this.setState(this.getStateFromStore());\n }\n }]);\n\n return RunsTable;\n}(_react2.default.Component);\n\nfunction formatRun(run, currentUser) {\n if (!run) return;\n return {\n user: run.user,\n context: run.sessionContext,\n query: run.query,\n status: run.state,\n infoUri: run.infoUri,\n started: run.queryStarted,\n duration: run.queryStats && run.queryStats.elapsedTime,\n output: run.output && run.output,\n _run: run,\n _currentUser: currentUser\n };\n}\n\nfunction selectQuery(query, sessionContext, e) {\n e.preventDefault();\n _QueryActions2.default.selectQuery({ query: query, sessionContext: sessionContext });\n}\n\nfunction selectTable(table, e) {\n e.preventDefault();\n _TableActions2.default.addTable({\n name: table\n });\n _TableActions2.default.selectTable(table);\n _TabActions2.default.selectTab(_TabConstants2.default.DATA_PREVIEW);\n}\n\nfunction previewQueryResult(file, query, e) {\n var pageNum = 1;\n var pageSize = 10;\n e.preventDefault();\n _ResultsPreviewActions2.default.selectPreviewQuery(query);\n _ResultsPreviewActions2.default.loadResultsPreview(file, pageNum, pageSize);\n _TabActions2.default.selectTab(_TabConstants2.default.RESULTS_PREVIEW);\n}\n\nfunction killRun(uuid) {\n _RunActions2.default.kill(uuid);\n}\n\nfunction toggleModal(component) {\n var msg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n var state = component.state;\n if (!state.showModal) {\n state.currentErrorMessage = msg;\n state.showModal = true;\n } else {\n state.currentErrorMessage = null;\n state.showModal = false;\n }\n component.setState(state);\n}\n\nfunction handleCollection(e, rowIndex, parentObj) {\n var queryText = encodeURIComponent(e.query);\n if (queryText.length > 1000) {\n alert(\"Error! Your SQL statement is too long! Please shorten it!\");\n } else if (metaStoreType != \"jdbc\") {\n alert(\"Collection failed! Only hetu-metastore storage type configured as JDBC is supported!\");\n } else {\n var catalog = e.sessionContext.catalog;\n var schema = e.sessionContext.schema;\n var state = parentObj.state;\n if (state.isCollected[rowIndex] == 0) {\n state.isCollected[rowIndex] = 1;\n _CollectionActions2.default.addToCollection(queryText, catalog, schema);\n } else {\n state.isCollected[rowIndex] = 0;\n _CollectionActions2.default.deleteCollection(queryText, catalog, schema);\n }\n parentObj.setState(state);\n }\n}\n\nfunction handleDelete(e) {\n var queryText = e.query;\n var catalog = e.sessionContext.catalog;\n var schema = e.sessionContext.schema;\n _CollectionActions2.default.deleteCollection(queryText, catalog, schema);\n}\n\nvar CellRenderers = {\n user: function user(cellData) {\n return _react2.default.createElement(\n 'span',\n { title: cellData },\n cellData\n );\n },\n context: function context(sessionContext) {\n var contextTitle = \"Catalog: \" + sessionContext.catalog + \"\\nSchema: \" + sessionContext.schema + \"\\n\";\n contextTitle += \"Properties: \\n\";\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = Object.entries(sessionContext.properties)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _ref10 = _step.value;\n\n var _ref11 = _slicedToArray(_ref10, 2);\n\n var key = _ref11[0];\n var value = _ref11[1];\n\n contextTitle += \" \" + key + \" = \" + value;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return _react2.default.createElement(\n 'span',\n { title: contextTitle },\n sessionContext.catalog + \".\" + sessionContext.schema\n );\n },\n query: function query(_query, sessionContext) {\n return _react2.default.createElement(\n 'a',\n { href: '#', onClick: selectQuery.bind(null, _query, sessionContext) },\n _react2.default.createElement(\n 'code',\n { title: _query },\n _query\n )\n );\n },\n status: function status(cellData, cellDataKey, rowData) {\n var run = rowData._run;\n var link = run.infoUri != null && run.infoUri != \"\" ? run.infoUri : \"#\";\n if (run.state === _RunStateConstants2.default.FAILED) {\n return _react2.default.createElement(\n 'span',\n null,\n _react2.default.createElement(\n 'span',\n { className: 'label label-danger', style: { minWidth: \"61px\" } },\n _react2.default.createElement(\n 'a',\n { href: link, target: '_blank' },\n 'FAILED'\n )\n ),\n _react2.default.createElement(\n 'a',\n { href: '#', title: 'Queries may fail or be cancelled if they exceed configured resources limits.This includes limits on memory consumption and result file size' },\n _react2.default.createElement('i', { className: 'fa fa-info', style: { top: '3px', color: '#d5534f', marginLeft: '5px' } })\n )\n );\n } else if (run.state === _RunStateConstants2.default.FINISHED) {\n return _react2.default.createElement(\n 'span',\n { className: 'label label-success', style: { minWidth: \"61px\" } },\n _react2.default.createElement(\n 'a',\n { href: link, target: '_blank' },\n run.state\n )\n );\n } else if (run.state === _RunStateConstants2.default.QUEUED) {\n return _react2.default.createElement(\n 'span',\n { className: 'label label-default', style: { minWidth: \"61px\" } },\n _react2.default.createElement(\n 'a',\n { href: link, target: '_blank' },\n run.state\n )\n );\n } else {\n return _react2.default.createElement(\n 'span',\n { className: 'label label-info', style: { minWidth: \"61px\" } },\n _react2.default.createElement(\n 'a',\n { href: link, target: '_blank' },\n run.state\n )\n );\n }\n },\n output: function output(cellData, cellDataKey, rowData, parentObj) {\n var run = rowData._run;\n var currentUser = rowData._currentUser;\n var killable = currentUser && currentUser.name === run.user;\n var output = cellData;\n if (output && output.location && run.state !== _RunStateConstants2.default.FAILED) {\n //Support relative URLs\n if (output.location[0] === '/' || output.location.indexOf('http') != -1 || output.location.indexOf('..') == 0) {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'a',\n { href: output.location, target: '_blank', className: 'btn' },\n 'Download CSV',\n _react2.default.createElement('i', { className: 'glyphicon glyphicon-download' })\n ),\n _react2.default.createElement(\n 'a',\n {\n href: '#',\n onClick: previewQueryResult.bind(null, output.location, {\n query: run.query,\n sessionContext: run.sessionContext\n }),\n className: 'btn' },\n 'Preview Results'\n )\n );\n } else {\n return _react2.default.createElement(\n 'a',\n { href: '#', onClick: selectTable.bind(null, output.location) },\n _react2.default.createElement(\n 'code',\n { title: output.location },\n output.location\n )\n );\n }\n } else if (run.state === 'RUNNING' || run.state === _RunStateConstants2.default.QUEUED || run.state === _RunStateConstants2.default.RESCHEDULING || run.state === _RunStateConstants2.default.RESUMING) {\n var progressFromStats = getProgressFromStats(run.queryStats);\n return _react2.default.createElement(\n 'div',\n { className: classNames({\n 'runs-table-progress': true,\n 'runs-table-progress-killable': killable\n }) },\n _react2.default.createElement(_ProgressBar2.default, { progress: progressFromStats }),\n killable ? _react2.default.createElement('span', { className: 'glyphicon glyphicon-remove text-danger',\n title: 'Kill query',\n onClick: killRun.bind(null, run.uuid) }) : null\n );\n\n // XXX this needs to be a modal...we can use a custom modal here or something experimental\n } else if (run.state === _RunStateConstants2.default.FAILED) {\n var message = run.error != undefined ? run.error.message : \"Unknown\";\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'button',\n { className: \"btn btn-error\",\n onClick: toggleModal.bind(null, parentObj, message) },\n 'Query ERROR'\n )\n );\n }\n },\n started: function started(cellData) {\n return _react2.default.createElement(\n _reactMoment2.default,\n { utc: true, local: true },\n cellData\n );\n },\n collect: function collect(sessionContext, query, rowIndex, parentObj) {\n var collection = { sessionContext: sessionContext, query: query };\n var descIndex = parentObj.state.runs.length - rowIndex - 1;\n return _react2.default.createElement(\n 'span',\n null,\n _react2.default.createElement(\n 'button',\n { className: 'collection-btn', onClick: function onClick() {\n handleCollection(collection, descIndex, parentObj);\n } },\n _react2.default.createElement('i', { className: 'icon-center fa fa-plus icon' }),\n _react2.default.createElement('i', { className: 'icon-center fa fa-star icon' })\n )\n );\n }\n};\n\nfunction getProgressFromStats(stats) {\n if (!stats || !stats.progressPercentage) {\n return 0.0;\n } else {\n return stats.progressPercentage;\n }\n}\n\nexports.default = RunsTable;\n\n//# sourceURL=webpack:///./queryeditor/components/RunsTable.jsx?"); /***/ }), diff --git a/presto-main/src/main/resources/webapp/dist/plan.js b/presto-main/src/main/resources/webapp/dist/plan.js index 4cc0031c6..47e2c3478 100644 --- a/presto-main/src/main/resources/webapp/dist/plan.js +++ b/presto-main/src/main/resources/webapp/dist/plan.js @@ -106,7 +106,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n}); /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QueryHeader = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./utils.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar SinglePressButton = function (_React$Component) {\n _inherits(SinglePressButton, _React$Component);\n\n function SinglePressButton(props) {\n _classCallCheck(this, SinglePressButton);\n\n var _this = _possibleConstructorReturn(this, (SinglePressButton.__proto__ || Object.getPrototypeOf(SinglePressButton)).call(this, props));\n\n _this.state = {\n isButtonDisabled: false,\n uri: _this.props.uri,\n label: _this.props.label\n };\n return _this;\n }\n\n _createClass(SinglePressButton, [{\n key: \"sendRequest\",\n value: function sendRequest() {\n this.setState({\n isButtonDisabled: true\n });\n\n console.log(\"request sent: \" + this.state.uri);\n $.ajax({ url: this.state.uri, type: 'DELETE', complete: function complete() {\n console.log(\"request finished: \" + this.state.uri);this.setState({ isButtonDisabled: false });\n } });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n return _react2.default.createElement(\n \"button\",\n {\n onClick: function onClick() {\n return _this2.sendRequest();\n },\n disabled: this.state.isButtonDisabled,\n className: \"btn btn-warning\",\n target: \"_blank\" },\n this.state.label\n );\n }\n }]);\n\n return SinglePressButton;\n}(_react2.default.Component);\n\nvar QueryHeader = exports.QueryHeader = function (_React$Component2) {\n _inherits(QueryHeader, _React$Component2);\n\n function QueryHeader(props) {\n _classCallCheck(this, QueryHeader);\n\n var _this3 = _possibleConstructorReturn(this, (QueryHeader.__proto__ || Object.getPrototypeOf(QueryHeader)).call(this, props));\n\n _this3.state = { suspendDisabled: false, resumeDisabled: false };\n return _this3;\n }\n\n _createClass(QueryHeader, [{\n key: \"isSuspendable\",\n value: function isSuspendable(query) {\n if (query.state === 'RUNNING') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"isResumable\",\n value: function isResumable(query) {\n if (query.state === 'SUSPENDED') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"renderProgressBar\",\n value: function renderProgressBar() {\n var query = this.props.query;\n var progressBarStyle = { width: (0, _utils.getProgressBarPercentage)(query) + \"%\", backgroundColor: (0, _utils.getQueryStateColor)(query) };\n var showSuspended = this.isSuspendable(query);\n var showResumable = this.isResumable(query);\n\n if ((0, _utils.isQueryEnded)(query)) {\n return _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n );\n }\n\n return _react2.default.createElement(\n \"table\",\n null,\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n { width: \"100%\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/preempted', type: 'PUT', data: \"Preempted via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Preempt\"\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/killed', type: 'PUT', data: \"Killed via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Kill\"\n )\n ),\n /*{\n showSuspended &&\n \n { $.ajax({url: '../v1/query/' + query.queryId + '/suspend', type: 'DELETE', complete: function(){ $('suspendButn').attr(\"disabled\", false)}})}} className=\"btn btn-warning\"\n target=\"_blank\">\n Suspend\n \n \n }\n {\n showResumable &&\n \n { $.ajax({url: '../v1/query/' + query.queryId + '/resume', type: 'DELETE', complete: function(){ $('resumeButn').attr(\"disabled\", false)}})}} className=\"btn btn-warning\"\n target=\"_blank\">\n Resume\n \n \n }*/\n showSuspended && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/suspend', label: \"Suspend\" })\n ),\n showResumable && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/resume', label: \"Resume\" })\n )\n )\n )\n );\n }\n }, {\n key: \"renderTab\",\n value: function renderTab(path, name) {\n var queryId = this.props.query.queryId;\n if (window.location.pathname.includes(path)) {\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn nav-disabled\" },\n name\n );\n }\n\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn\" },\n name\n );\n }\n }, {\n key: \"render\",\n value: function render() {\n var query = this.props.query;\n return _react2.default.createElement(\n \"div\",\n null,\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"h3\",\n { className: \"query-id\" },\n _react2.default.createElement(\n \"span\",\n null,\n \"Query Detail: \"\n ),\n _react2.default.createElement(\n \"span\",\n { id: \"query-id\" },\n query.queryId\n ),\n _react2.default.createElement(\n \"a\",\n { className: \"btn copy-button\", \"data-clipboard-target\": \"#query-id\", \"data-toggle\": \"tooltip\", \"data-placement\": \"right\", title: \"Copy to clipboard\" },\n _react2.default.createElement(\"span\", { className: \"glyphicon glyphicon-copy\", \"aria-hidden\": \"true\", alt: \"Copy to clipboard\" })\n )\n )\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"table\",\n { className: \"header-inline-links\" },\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n null,\n this.renderTab(\"query.html\", \"Overview\"),\n \"\\xA0\",\n this.renderTab(\"plan.html\", \"Live Plan\"),\n \"\\xA0\",\n this.renderTab(\"stage.html\", \"Stage Performance\"),\n \"\\xA0\",\n this.renderTab(\"timeline.html\", \"Splits\"),\n \"\\xA0\",\n _react2.default.createElement(\n \"a\",\n { href: \"../v1/query/\" + query.queryId + \"?pretty\", className: \"btn btn-info navbar-btn\", target: \"_blank\" },\n \"JSON\"\n )\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\"hr\", { className: \"h2-hr\" }),\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-12\" },\n this.renderProgressBar()\n )\n )\n );\n }\n }]);\n\n return QueryHeader;\n}(_react2.default.Component);\n\n//# sourceURL=webpack:///./components/QueryHeader.jsx?"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QueryHeader = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./utils.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar SinglePressButton = function (_React$Component) {\n _inherits(SinglePressButton, _React$Component);\n\n function SinglePressButton(props) {\n _classCallCheck(this, SinglePressButton);\n\n var _this = _possibleConstructorReturn(this, (SinglePressButton.__proto__ || Object.getPrototypeOf(SinglePressButton)).call(this, props));\n\n _this.state = {\n isButtonDisabled: false,\n uri: _this.props.uri,\n label: _this.props.label\n };\n return _this;\n }\n\n _createClass(SinglePressButton, [{\n key: \"sendRequest\",\n value: function sendRequest() {\n this.setState({\n isButtonDisabled: true\n });\n\n $.ajax({ url: this.state.uri, type: 'DELETE', complete: function complete() {\n this.setState({ isButtonDisabled: false });\n } });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n return _react2.default.createElement(\n \"button\",\n {\n onClick: function onClick() {\n return _this2.sendRequest();\n },\n disabled: this.state.isButtonDisabled,\n className: \"btn btn-warning\",\n target: \"_blank\" },\n this.state.label\n );\n }\n }]);\n\n return SinglePressButton;\n}(_react2.default.Component);\n\nvar QueryHeader = exports.QueryHeader = function (_React$Component2) {\n _inherits(QueryHeader, _React$Component2);\n\n function QueryHeader(props) {\n _classCallCheck(this, QueryHeader);\n\n var _this3 = _possibleConstructorReturn(this, (QueryHeader.__proto__ || Object.getPrototypeOf(QueryHeader)).call(this, props));\n\n _this3.state = { suspendDisabled: false, resumeDisabled: false };\n return _this3;\n }\n\n _createClass(QueryHeader, [{\n key: \"isSuspendable\",\n value: function isSuspendable(query) {\n if (query.state === 'RUNNING') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"isResumable\",\n value: function isResumable(query) {\n if (query.state === 'SUSPENDED') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"renderProgressBar\",\n value: function renderProgressBar() {\n var query = this.props.query;\n var progressBarStyle = { width: (0, _utils.getProgressBarPercentage)(query) + \"%\", backgroundColor: (0, _utils.getQueryStateColor)(query) };\n var showSuspended = this.isSuspendable(query);\n var showResumable = this.isResumable(query);\n\n if ((0, _utils.isQueryEnded)(query)) {\n return _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n );\n }\n\n return _react2.default.createElement(\n \"table\",\n null,\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n { width: \"100%\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/preempted', type: 'PUT', data: \"Preempted via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Preempt\"\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/killed', type: 'PUT', data: \"Killed via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Kill\"\n )\n ),\n showSuspended && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/suspend', label: \"Suspend\" })\n ),\n showResumable && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/resume', label: \"Resume\" })\n )\n )\n )\n );\n }\n }, {\n key: \"renderTab\",\n value: function renderTab(path, name) {\n var queryId = this.props.query.queryId;\n if (window.location.pathname.includes(path)) {\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn nav-disabled\" },\n name\n );\n }\n\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn\" },\n name\n );\n }\n }, {\n key: \"render\",\n value: function render() {\n var query = this.props.query;\n return _react2.default.createElement(\n \"div\",\n null,\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"h3\",\n { className: \"query-id\" },\n _react2.default.createElement(\n \"span\",\n null,\n \"Query Detail: \"\n ),\n _react2.default.createElement(\n \"span\",\n { id: \"query-id\" },\n query.queryId\n ),\n _react2.default.createElement(\n \"a\",\n { className: \"btn copy-button\", \"data-clipboard-target\": \"#query-id\", \"data-toggle\": \"tooltip\", \"data-placement\": \"right\", title: \"Copy to clipboard\" },\n _react2.default.createElement(\"span\", { className: \"glyphicon glyphicon-copy\", \"aria-hidden\": \"true\", alt: \"Copy to clipboard\" })\n )\n )\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"table\",\n { className: \"header-inline-links\" },\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n null,\n this.renderTab(\"query.html\", \"Overview\"),\n \"\\xA0\",\n this.renderTab(\"plan.html\", \"Live Plan\"),\n \"\\xA0\",\n this.renderTab(\"stage.html\", \"Stage Performance\"),\n \"\\xA0\",\n this.renderTab(\"timeline.html\", \"Splits\"),\n \"\\xA0\",\n _react2.default.createElement(\n \"a\",\n { href: \"../v1/query/\" + query.queryId + \"?pretty\", className: \"btn btn-info navbar-btn\", target: \"_blank\" },\n \"JSON\"\n )\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\"hr\", { className: \"h2-hr\" }),\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-12\" },\n this.renderProgressBar()\n )\n )\n );\n }\n }]);\n\n return QueryHeader;\n}(_react2.default.Component);\n\n//# sourceURL=webpack:///./components/QueryHeader.jsx?"); /***/ }), diff --git a/presto-main/src/main/resources/webapp/dist/query.js b/presto-main/src/main/resources/webapp/dist/query.js index 25c83b3cf..d1b678ad9 100644 --- a/presto-main/src/main/resources/webapp/dist/query.js +++ b/presto-main/src/main/resources/webapp/dist/query.js @@ -106,7 +106,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n}); /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QueryHeader = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./utils.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar SinglePressButton = function (_React$Component) {\n _inherits(SinglePressButton, _React$Component);\n\n function SinglePressButton(props) {\n _classCallCheck(this, SinglePressButton);\n\n var _this = _possibleConstructorReturn(this, (SinglePressButton.__proto__ || Object.getPrototypeOf(SinglePressButton)).call(this, props));\n\n _this.state = {\n isButtonDisabled: false,\n uri: _this.props.uri,\n label: _this.props.label\n };\n return _this;\n }\n\n _createClass(SinglePressButton, [{\n key: \"sendRequest\",\n value: function sendRequest() {\n this.setState({\n isButtonDisabled: true\n });\n\n console.log(\"request sent: \" + this.state.uri);\n $.ajax({ url: this.state.uri, type: 'DELETE', complete: function complete() {\n console.log(\"request finished: \" + this.state.uri);this.setState({ isButtonDisabled: false });\n } });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n return _react2.default.createElement(\n \"button\",\n {\n onClick: function onClick() {\n return _this2.sendRequest();\n },\n disabled: this.state.isButtonDisabled,\n className: \"btn btn-warning\",\n target: \"_blank\" },\n this.state.label\n );\n }\n }]);\n\n return SinglePressButton;\n}(_react2.default.Component);\n\nvar QueryHeader = exports.QueryHeader = function (_React$Component2) {\n _inherits(QueryHeader, _React$Component2);\n\n function QueryHeader(props) {\n _classCallCheck(this, QueryHeader);\n\n var _this3 = _possibleConstructorReturn(this, (QueryHeader.__proto__ || Object.getPrototypeOf(QueryHeader)).call(this, props));\n\n _this3.state = { suspendDisabled: false, resumeDisabled: false };\n return _this3;\n }\n\n _createClass(QueryHeader, [{\n key: \"isSuspendable\",\n value: function isSuspendable(query) {\n if (query.state === 'RUNNING') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"isResumable\",\n value: function isResumable(query) {\n if (query.state === 'SUSPENDED') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"renderProgressBar\",\n value: function renderProgressBar() {\n var query = this.props.query;\n var progressBarStyle = { width: (0, _utils.getProgressBarPercentage)(query) + \"%\", backgroundColor: (0, _utils.getQueryStateColor)(query) };\n var showSuspended = this.isSuspendable(query);\n var showResumable = this.isResumable(query);\n\n if ((0, _utils.isQueryEnded)(query)) {\n return _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n );\n }\n\n return _react2.default.createElement(\n \"table\",\n null,\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n { width: \"100%\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/preempted', type: 'PUT', data: \"Preempted via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Preempt\"\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/killed', type: 'PUT', data: \"Killed via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Kill\"\n )\n ),\n /*{\n showSuspended &&\n \n { $.ajax({url: '../v1/query/' + query.queryId + '/suspend', type: 'DELETE', complete: function(){ $('suspendButn').attr(\"disabled\", false)}})}} className=\"btn btn-warning\"\n target=\"_blank\">\n Suspend\n \n \n }\n {\n showResumable &&\n \n { $.ajax({url: '../v1/query/' + query.queryId + '/resume', type: 'DELETE', complete: function(){ $('resumeButn').attr(\"disabled\", false)}})}} className=\"btn btn-warning\"\n target=\"_blank\">\n Resume\n \n \n }*/\n showSuspended && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/suspend', label: \"Suspend\" })\n ),\n showResumable && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/resume', label: \"Resume\" })\n )\n )\n )\n );\n }\n }, {\n key: \"renderTab\",\n value: function renderTab(path, name) {\n var queryId = this.props.query.queryId;\n if (window.location.pathname.includes(path)) {\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn nav-disabled\" },\n name\n );\n }\n\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn\" },\n name\n );\n }\n }, {\n key: \"render\",\n value: function render() {\n var query = this.props.query;\n return _react2.default.createElement(\n \"div\",\n null,\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"h3\",\n { className: \"query-id\" },\n _react2.default.createElement(\n \"span\",\n null,\n \"Query Detail: \"\n ),\n _react2.default.createElement(\n \"span\",\n { id: \"query-id\" },\n query.queryId\n ),\n _react2.default.createElement(\n \"a\",\n { className: \"btn copy-button\", \"data-clipboard-target\": \"#query-id\", \"data-toggle\": \"tooltip\", \"data-placement\": \"right\", title: \"Copy to clipboard\" },\n _react2.default.createElement(\"span\", { className: \"glyphicon glyphicon-copy\", \"aria-hidden\": \"true\", alt: \"Copy to clipboard\" })\n )\n )\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"table\",\n { className: \"header-inline-links\" },\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n null,\n this.renderTab(\"query.html\", \"Overview\"),\n \"\\xA0\",\n this.renderTab(\"plan.html\", \"Live Plan\"),\n \"\\xA0\",\n this.renderTab(\"stage.html\", \"Stage Performance\"),\n \"\\xA0\",\n this.renderTab(\"timeline.html\", \"Splits\"),\n \"\\xA0\",\n _react2.default.createElement(\n \"a\",\n { href: \"../v1/query/\" + query.queryId + \"?pretty\", className: \"btn btn-info navbar-btn\", target: \"_blank\" },\n \"JSON\"\n )\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\"hr\", { className: \"h2-hr\" }),\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-12\" },\n this.renderProgressBar()\n )\n )\n );\n }\n }]);\n\n return QueryHeader;\n}(_react2.default.Component);\n\n//# sourceURL=webpack:///./components/QueryHeader.jsx?"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QueryHeader = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./utils.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar SinglePressButton = function (_React$Component) {\n _inherits(SinglePressButton, _React$Component);\n\n function SinglePressButton(props) {\n _classCallCheck(this, SinglePressButton);\n\n var _this = _possibleConstructorReturn(this, (SinglePressButton.__proto__ || Object.getPrototypeOf(SinglePressButton)).call(this, props));\n\n _this.state = {\n isButtonDisabled: false,\n uri: _this.props.uri,\n label: _this.props.label\n };\n return _this;\n }\n\n _createClass(SinglePressButton, [{\n key: \"sendRequest\",\n value: function sendRequest() {\n this.setState({\n isButtonDisabled: true\n });\n\n $.ajax({ url: this.state.uri, type: 'DELETE', complete: function complete() {\n this.setState({ isButtonDisabled: false });\n } });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n return _react2.default.createElement(\n \"button\",\n {\n onClick: function onClick() {\n return _this2.sendRequest();\n },\n disabled: this.state.isButtonDisabled,\n className: \"btn btn-warning\",\n target: \"_blank\" },\n this.state.label\n );\n }\n }]);\n\n return SinglePressButton;\n}(_react2.default.Component);\n\nvar QueryHeader = exports.QueryHeader = function (_React$Component2) {\n _inherits(QueryHeader, _React$Component2);\n\n function QueryHeader(props) {\n _classCallCheck(this, QueryHeader);\n\n var _this3 = _possibleConstructorReturn(this, (QueryHeader.__proto__ || Object.getPrototypeOf(QueryHeader)).call(this, props));\n\n _this3.state = { suspendDisabled: false, resumeDisabled: false };\n return _this3;\n }\n\n _createClass(QueryHeader, [{\n key: \"isSuspendable\",\n value: function isSuspendable(query) {\n if (query.state === 'RUNNING') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"isResumable\",\n value: function isResumable(query) {\n if (query.state === 'SUSPENDED') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"renderProgressBar\",\n value: function renderProgressBar() {\n var query = this.props.query;\n var progressBarStyle = { width: (0, _utils.getProgressBarPercentage)(query) + \"%\", backgroundColor: (0, _utils.getQueryStateColor)(query) };\n var showSuspended = this.isSuspendable(query);\n var showResumable = this.isResumable(query);\n\n if ((0, _utils.isQueryEnded)(query)) {\n return _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n );\n }\n\n return _react2.default.createElement(\n \"table\",\n null,\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n { width: \"100%\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/preempted', type: 'PUT', data: \"Preempted via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Preempt\"\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/killed', type: 'PUT', data: \"Killed via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Kill\"\n )\n ),\n showSuspended && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/suspend', label: \"Suspend\" })\n ),\n showResumable && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/resume', label: \"Resume\" })\n )\n )\n )\n );\n }\n }, {\n key: \"renderTab\",\n value: function renderTab(path, name) {\n var queryId = this.props.query.queryId;\n if (window.location.pathname.includes(path)) {\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn nav-disabled\" },\n name\n );\n }\n\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn\" },\n name\n );\n }\n }, {\n key: \"render\",\n value: function render() {\n var query = this.props.query;\n return _react2.default.createElement(\n \"div\",\n null,\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"h3\",\n { className: \"query-id\" },\n _react2.default.createElement(\n \"span\",\n null,\n \"Query Detail: \"\n ),\n _react2.default.createElement(\n \"span\",\n { id: \"query-id\" },\n query.queryId\n ),\n _react2.default.createElement(\n \"a\",\n { className: \"btn copy-button\", \"data-clipboard-target\": \"#query-id\", \"data-toggle\": \"tooltip\", \"data-placement\": \"right\", title: \"Copy to clipboard\" },\n _react2.default.createElement(\"span\", { className: \"glyphicon glyphicon-copy\", \"aria-hidden\": \"true\", alt: \"Copy to clipboard\" })\n )\n )\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"table\",\n { className: \"header-inline-links\" },\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n null,\n this.renderTab(\"query.html\", \"Overview\"),\n \"\\xA0\",\n this.renderTab(\"plan.html\", \"Live Plan\"),\n \"\\xA0\",\n this.renderTab(\"stage.html\", \"Stage Performance\"),\n \"\\xA0\",\n this.renderTab(\"timeline.html\", \"Splits\"),\n \"\\xA0\",\n _react2.default.createElement(\n \"a\",\n { href: \"../v1/query/\" + query.queryId + \"?pretty\", className: \"btn btn-info navbar-btn\", target: \"_blank\" },\n \"JSON\"\n )\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\"hr\", { className: \"h2-hr\" }),\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-12\" },\n this.renderProgressBar()\n )\n )\n );\n }\n }]);\n\n return QueryHeader;\n}(_react2.default.Component);\n\n//# sourceURL=webpack:///./components/QueryHeader.jsx?"); /***/ }), diff --git a/presto-main/src/main/resources/webapp/dist/stage.js b/presto-main/src/main/resources/webapp/dist/stage.js index ffbd3f901..f14c99971 100644 --- a/presto-main/src/main/resources/webapp/dist/stage.js +++ b/presto-main/src/main/resources/webapp/dist/stage.js @@ -94,7 +94,7 @@ /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QueryHeader = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./utils.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar SinglePressButton = function (_React$Component) {\n _inherits(SinglePressButton, _React$Component);\n\n function SinglePressButton(props) {\n _classCallCheck(this, SinglePressButton);\n\n var _this = _possibleConstructorReturn(this, (SinglePressButton.__proto__ || Object.getPrototypeOf(SinglePressButton)).call(this, props));\n\n _this.state = {\n isButtonDisabled: false,\n uri: _this.props.uri,\n label: _this.props.label\n };\n return _this;\n }\n\n _createClass(SinglePressButton, [{\n key: \"sendRequest\",\n value: function sendRequest() {\n this.setState({\n isButtonDisabled: true\n });\n\n console.log(\"request sent: \" + this.state.uri);\n $.ajax({ url: this.state.uri, type: 'DELETE', complete: function complete() {\n console.log(\"request finished: \" + this.state.uri);this.setState({ isButtonDisabled: false });\n } });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n return _react2.default.createElement(\n \"button\",\n {\n onClick: function onClick() {\n return _this2.sendRequest();\n },\n disabled: this.state.isButtonDisabled,\n className: \"btn btn-warning\",\n target: \"_blank\" },\n this.state.label\n );\n }\n }]);\n\n return SinglePressButton;\n}(_react2.default.Component);\n\nvar QueryHeader = exports.QueryHeader = function (_React$Component2) {\n _inherits(QueryHeader, _React$Component2);\n\n function QueryHeader(props) {\n _classCallCheck(this, QueryHeader);\n\n var _this3 = _possibleConstructorReturn(this, (QueryHeader.__proto__ || Object.getPrototypeOf(QueryHeader)).call(this, props));\n\n _this3.state = { suspendDisabled: false, resumeDisabled: false };\n return _this3;\n }\n\n _createClass(QueryHeader, [{\n key: \"isSuspendable\",\n value: function isSuspendable(query) {\n if (query.state === 'RUNNING') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"isResumable\",\n value: function isResumable(query) {\n if (query.state === 'SUSPENDED') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"renderProgressBar\",\n value: function renderProgressBar() {\n var query = this.props.query;\n var progressBarStyle = { width: (0, _utils.getProgressBarPercentage)(query) + \"%\", backgroundColor: (0, _utils.getQueryStateColor)(query) };\n var showSuspended = this.isSuspendable(query);\n var showResumable = this.isResumable(query);\n\n if ((0, _utils.isQueryEnded)(query)) {\n return _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n );\n }\n\n return _react2.default.createElement(\n \"table\",\n null,\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n { width: \"100%\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/preempted', type: 'PUT', data: \"Preempted via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Preempt\"\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/killed', type: 'PUT', data: \"Killed via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Kill\"\n )\n ),\n /*{\n showSuspended &&\n \n { $.ajax({url: '../v1/query/' + query.queryId + '/suspend', type: 'DELETE', complete: function(){ $('suspendButn').attr(\"disabled\", false)}})}} className=\"btn btn-warning\"\n target=\"_blank\">\n Suspend\n \n \n }\n {\n showResumable &&\n \n { $.ajax({url: '../v1/query/' + query.queryId + '/resume', type: 'DELETE', complete: function(){ $('resumeButn').attr(\"disabled\", false)}})}} className=\"btn btn-warning\"\n target=\"_blank\">\n Resume\n \n \n }*/\n showSuspended && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/suspend', label: \"Suspend\" })\n ),\n showResumable && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/resume', label: \"Resume\" })\n )\n )\n )\n );\n }\n }, {\n key: \"renderTab\",\n value: function renderTab(path, name) {\n var queryId = this.props.query.queryId;\n if (window.location.pathname.includes(path)) {\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn nav-disabled\" },\n name\n );\n }\n\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn\" },\n name\n );\n }\n }, {\n key: \"render\",\n value: function render() {\n var query = this.props.query;\n return _react2.default.createElement(\n \"div\",\n null,\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"h3\",\n { className: \"query-id\" },\n _react2.default.createElement(\n \"span\",\n null,\n \"Query Detail: \"\n ),\n _react2.default.createElement(\n \"span\",\n { id: \"query-id\" },\n query.queryId\n ),\n _react2.default.createElement(\n \"a\",\n { className: \"btn copy-button\", \"data-clipboard-target\": \"#query-id\", \"data-toggle\": \"tooltip\", \"data-placement\": \"right\", title: \"Copy to clipboard\" },\n _react2.default.createElement(\"span\", { className: \"glyphicon glyphicon-copy\", \"aria-hidden\": \"true\", alt: \"Copy to clipboard\" })\n )\n )\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"table\",\n { className: \"header-inline-links\" },\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n null,\n this.renderTab(\"query.html\", \"Overview\"),\n \"\\xA0\",\n this.renderTab(\"plan.html\", \"Live Plan\"),\n \"\\xA0\",\n this.renderTab(\"stage.html\", \"Stage Performance\"),\n \"\\xA0\",\n this.renderTab(\"timeline.html\", \"Splits\"),\n \"\\xA0\",\n _react2.default.createElement(\n \"a\",\n { href: \"../v1/query/\" + query.queryId + \"?pretty\", className: \"btn btn-info navbar-btn\", target: \"_blank\" },\n \"JSON\"\n )\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\"hr\", { className: \"h2-hr\" }),\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-12\" },\n this.renderProgressBar()\n )\n )\n );\n }\n }]);\n\n return QueryHeader;\n}(_react2.default.Component);\n\n//# sourceURL=webpack:///./components/QueryHeader.jsx?"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QueryHeader = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./utils.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar SinglePressButton = function (_React$Component) {\n _inherits(SinglePressButton, _React$Component);\n\n function SinglePressButton(props) {\n _classCallCheck(this, SinglePressButton);\n\n var _this = _possibleConstructorReturn(this, (SinglePressButton.__proto__ || Object.getPrototypeOf(SinglePressButton)).call(this, props));\n\n _this.state = {\n isButtonDisabled: false,\n uri: _this.props.uri,\n label: _this.props.label\n };\n return _this;\n }\n\n _createClass(SinglePressButton, [{\n key: \"sendRequest\",\n value: function sendRequest() {\n this.setState({\n isButtonDisabled: true\n });\n\n $.ajax({ url: this.state.uri, type: 'DELETE', complete: function complete() {\n this.setState({ isButtonDisabled: false });\n } });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n return _react2.default.createElement(\n \"button\",\n {\n onClick: function onClick() {\n return _this2.sendRequest();\n },\n disabled: this.state.isButtonDisabled,\n className: \"btn btn-warning\",\n target: \"_blank\" },\n this.state.label\n );\n }\n }]);\n\n return SinglePressButton;\n}(_react2.default.Component);\n\nvar QueryHeader = exports.QueryHeader = function (_React$Component2) {\n _inherits(QueryHeader, _React$Component2);\n\n function QueryHeader(props) {\n _classCallCheck(this, QueryHeader);\n\n var _this3 = _possibleConstructorReturn(this, (QueryHeader.__proto__ || Object.getPrototypeOf(QueryHeader)).call(this, props));\n\n _this3.state = { suspendDisabled: false, resumeDisabled: false };\n return _this3;\n }\n\n _createClass(QueryHeader, [{\n key: \"isSuspendable\",\n value: function isSuspendable(query) {\n if (query.state === 'RUNNING') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"isResumable\",\n value: function isResumable(query) {\n if (query.state === 'SUSPENDED') {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"renderProgressBar\",\n value: function renderProgressBar() {\n var query = this.props.query;\n var progressBarStyle = { width: (0, _utils.getProgressBarPercentage)(query) + \"%\", backgroundColor: (0, _utils.getQueryStateColor)(query) };\n var showSuspended = this.isSuspendable(query);\n var showResumable = this.isResumable(query);\n\n if ((0, _utils.isQueryEnded)(query)) {\n return _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n );\n }\n\n return _react2.default.createElement(\n \"table\",\n null,\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n { width: \"100%\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-large\" },\n _react2.default.createElement(\n \"div\",\n { className: \"progress-bar progress-bar-info\", role: \"progressbar\", \"aria-valuenow\": (0, _utils.getProgressBarPercentage)(query), \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\",\n style: progressBarStyle },\n (0, _utils.getProgressBarTitle)(query)\n )\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/preempted', type: 'PUT', data: \"Preempted via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Preempt\"\n )\n ),\n _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(\n \"a\",\n { onClick: function onClick() {\n return $.ajax({ url: '../v1/query/' + query.queryId + '/killed', type: 'PUT', data: \"Killed via web UI\" });\n }, className: \"btn btn-warning\",\n target: \"_blank\" },\n \"Kill\"\n )\n ),\n showSuspended && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/suspend', label: \"Suspend\" })\n ),\n showResumable && _react2.default.createElement(\n \"td\",\n null,\n _react2.default.createElement(SinglePressButton, { uri: '../v1/query/' + query.queryId + '/resume', label: \"Resume\" })\n )\n )\n )\n );\n }\n }, {\n key: \"renderTab\",\n value: function renderTab(path, name) {\n var queryId = this.props.query.queryId;\n if (window.location.pathname.includes(path)) {\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn nav-disabled\" },\n name\n );\n }\n\n return _react2.default.createElement(\n \"a\",\n { href: path + '?' + queryId, className: \"btn btn-info navbar-btn\" },\n name\n );\n }\n }, {\n key: \"render\",\n value: function render() {\n var query = this.props.query;\n return _react2.default.createElement(\n \"div\",\n null,\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"h3\",\n { className: \"query-id\" },\n _react2.default.createElement(\n \"span\",\n null,\n \"Query Detail: \"\n ),\n _react2.default.createElement(\n \"span\",\n { id: \"query-id\" },\n query.queryId\n ),\n _react2.default.createElement(\n \"a\",\n { className: \"btn copy-button\", \"data-clipboard-target\": \"#query-id\", \"data-toggle\": \"tooltip\", \"data-placement\": \"right\", title: \"Copy to clipboard\" },\n _react2.default.createElement(\"span\", { className: \"glyphicon glyphicon-copy\", \"aria-hidden\": \"true\", alt: \"Copy to clipboard\" })\n )\n )\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-6\" },\n _react2.default.createElement(\n \"table\",\n { className: \"header-inline-links\" },\n _react2.default.createElement(\n \"tbody\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"td\",\n null,\n this.renderTab(\"query.html\", \"Overview\"),\n \"\\xA0\",\n this.renderTab(\"plan.html\", \"Live Plan\"),\n \"\\xA0\",\n this.renderTab(\"stage.html\", \"Stage Performance\"),\n \"\\xA0\",\n this.renderTab(\"timeline.html\", \"Splits\"),\n \"\\xA0\",\n _react2.default.createElement(\n \"a\",\n { href: \"../v1/query/\" + query.queryId + \"?pretty\", className: \"btn btn-info navbar-btn\", target: \"_blank\" },\n \"JSON\"\n )\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\"hr\", { className: \"h2-hr\" }),\n _react2.default.createElement(\n \"div\",\n { className: \"row\" },\n _react2.default.createElement(\n \"div\",\n { className: \"col-xs-12\" },\n this.renderProgressBar()\n )\n )\n );\n }\n }]);\n\n return QueryHeader;\n}(_react2.default.Component);\n\n//# sourceURL=webpack:///./components/QueryHeader.jsx?"); /***/ }), diff --git a/presto-main/src/main/resources/webapp/src/queryeditor/components/RunsTable.jsx b/presto-main/src/main/resources/webapp/src/queryeditor/components/RunsTable.jsx index 36dbdeee2..c85a7980b 100644 --- a/presto-main/src/main/resources/webapp/src/queryeditor/components/RunsTable.jsx +++ b/presto-main/src/main/resources/webapp/src/queryeditor/components/RunsTable.jsx @@ -316,7 +316,7 @@ function toggleModal(component, msg=null) { } function handleCollection(e,rowIndex,parentObj) { - let queryText = e.query; + let queryText = encodeURIComponent(e.query); if(queryText.length > 1000) { alert("Error! Your SQL statement is too long! Please shorten it!"); }