From 8a47e218e506b93a4810c640fbe34d2d83de06b4 Mon Sep 17 00:00:00 2001 From: maxiaoqi2020 Date: Sat, 27 Mar 2021 08:49:54 +0800 Subject: [PATCH] Fix UI display issue due to the large network latency --- .../memory/ClusterMemoryManager.java | 40 ++++++------- .../src/main/resources/webapp/dist/nodes.js | 2 +- .../webapp/src/overview/NodesMain.jsx | 60 +++++++++---------- 3 files changed, 49 insertions(+), 53 deletions(-) diff --git a/presto-main/src/main/java/io/prestosql/memory/ClusterMemoryManager.java b/presto-main/src/main/java/io/prestosql/memory/ClusterMemoryManager.java index 7b3cc3eb3..dcd223d98 100644 --- a/presto-main/src/main/java/io/prestosql/memory/ClusterMemoryManager.java +++ b/presto-main/src/main/java/io/prestosql/memory/ClusterMemoryManager.java @@ -56,10 +56,7 @@ import javax.annotation.PreDestroy; import javax.annotation.concurrent.GuardedBy; import javax.inject.Inject; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -84,7 +81,6 @@ import static com.google.common.collect.ImmutableList.toImmutableList; import static com.google.common.collect.ImmutableSet.toImmutableSet; import static com.google.common.collect.MoreCollectors.toOptional; import static com.google.common.collect.Sets.difference; -import static io.airlift.http.client.HttpUriBuilder.uriBuilderFrom; import static io.airlift.units.DataSize.succinctBytes; import static io.airlift.units.Duration.nanosSince; import static io.prestosql.ExceededMemoryLimitException.exceededGlobalTotalLimit; @@ -540,8 +536,9 @@ public class ClusterMemoryManager // Add new nodes for (InternalNode node : aliveNodes) { if (!nodes.containsKey(node.getNodeIdentifier()) && shouldIncludeNode(node)) { - nodes.put(node.getNodeIdentifier(), new RemoteNodeMemory(node, httpClient, memoryInfoCodec, assignmentsRequestCodec, locationFactory.createMemoryInfoLocation(node), isBinaryEncoding)); - allNodes.put(node.getNodeIdentifier(), new RemoteNodeMemory(node, httpClient, memoryInfoCodec, assignmentsRequestCodec, locationFactory.createMemoryInfoLocation(node), isBinaryEncoding)); +// nodes.put(node.getNodeIdentifier(), new RemoteNodeMemory(node, httpClient, memoryInfoCodec, assignmentsRequestCodec, locationFactory.createMemoryInfoLocation(node), isBinaryEncoding)); + nodes.put(node.getInternalUri().toString(), new RemoteNodeMemory(node, httpClient, memoryInfoCodec, assignmentsRequestCodec, locationFactory.createMemoryInfoLocation(node), isBinaryEncoding)); + allNodes.put(node.getInternalUri().toString(), new RemoteNodeMemory(node, httpClient, memoryInfoCodec, assignmentsRequestCodec, locationFactory.createMemoryInfoLocation(node), isBinaryEncoding)); } } @@ -614,29 +611,28 @@ public class ClusterMemoryManager for (Entry entry : allNodes.entrySet()) { // workerId is of the form "node_identifier [node_host] role" InternalNode node = entry.getValue().getNode(); - String role = node.isCoordinator() ? (node.isWorker() ? "Coordinator & Worker" : "Coordinator") : - "Worker"; - String workerId = "[" + entry.getValue().getNode().getInternalUri().toString() + "] " + role; - URI stateURI = uriBuilderFrom(entry.getValue().getNode().getInternalUri()) - .appendPath("/v1/info/state") - .build(); + StringBuilder role = new StringBuilder(node.isCoordinator() ? (node.isWorker() ? "Coordinator & Worker" : "Coordinator") : + "Worker"); + role = new StringBuilder("\"" + role + "\""); + String workerId = entry.getValue().getNode().getInternalUri().toString(); String stateTemp = "\"" + NodeState.DISCONNECTION + "\""; - try ( - InputStreamReader inputStreamReader = new InputStreamReader(stateURI.toURL().openStream()); - BufferedReader reader = new BufferedReader(inputStreamReader)) { - stateTemp = reader.readLine(); - } - catch (IOException e) { - log.info("Worker disconnect"); + if (nodes.containsKey(entry.getKey())) { + stateTemp = "\"" + ACTIVE + "\""; } String state = stateTemp.substring(0, 2).toUpperCase(Locale.ENGLISH) + stateTemp.substring(2).toLowerCase(Locale.ENGLISH); String id = "\"" + node.getNodeIdentifier() + "\""; JsonNode jsonNode = null; try { - MemoryInfo info = entry.getValue().getInfo().orElse(new MemoryInfo(0, 0, 0, new DataSize(0, - DataSize.Unit.BYTE), new HashMap<>())); + MemoryInfo activeInfo = new MemoryInfo(0, 0, 0, new DataSize(0, + DataSize.Unit.BYTE), new HashMap<>()); + for (Entry activeEntry : nodes.entrySet()) { + activeInfo = activeEntry.getValue().getInfo().orElse(new MemoryInfo(0, 0, 0, new DataSize(0, + DataSize.Unit.BYTE), new HashMap<>())); + break; + } + MemoryInfo info = entry.getValue().getInfo().orElse(activeInfo); String memoryInfoJson = new ObjectMapper().writeValueAsString(info); - StringBuilder memoryAndStateInfo = new StringBuilder(memoryInfoJson).insert(memoryInfoJson.length() - 1, ",\"state\":" + state + ",\"id\":" + id); + StringBuilder memoryAndStateInfo = new StringBuilder(memoryInfoJson).insert(memoryInfoJson.length() - 1, ",\"state\":" + state + ",\"id\":" + id + ",\"role\":" + role); jsonNode = new ObjectMapper().readTree(memoryAndStateInfo.toString()); } catch (JsonProcessingException e) { diff --git a/presto-main/src/main/resources/webapp/dist/nodes.js b/presto-main/src/main/resources/webapp/dist/nodes.js index 7e2e3adeb..c8c7efa1f 100644 --- a/presto-main/src/main/resources/webapp/dist/nodes.js +++ b/presto-main/src/main/resources/webapp/dist/nodes.js @@ -10129,7 +10129,7 @@ eval("\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/i /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\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 _Header = __webpack_require__(/*! ../queryeditor/components/Header */ \"./queryeditor/components/Header.jsx\");\n\nvar _Header2 = _interopRequireDefault(_Header);\n\nvar _Footer = __webpack_require__(/*! ../queryeditor/components/Footer */ \"./queryeditor/components/Footer.jsx\");\n\nvar _Footer2 = _interopRequireDefault(_Footer);\n\nvar _StatusFooter = __webpack_require__(/*! ../queryeditor/components/StatusFooter */ \"./queryeditor/components/StatusFooter.jsx\");\n\nvar _StatusFooter2 = _interopRequireDefault(_StatusFooter);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./utils.js\");\n\nvar _NavigationMenu = __webpack_require__(/*! ../NavigationMenu */ \"./NavigationMenu.jsx\");\n\nvar _NavigationMenu2 = _interopRequireDefault(_NavigationMenu);\n\nvar _OverviewStore = __webpack_require__(/*! ../overview/OverviewStore */ \"./overview/OverviewStore.js\");\n\nvar _OverviewStore2 = _interopRequireDefault(_OverviewStore);\n\nvar _OverviewActions = __webpack_require__(/*! ./OverviewActions */ \"./overview/OverviewActions.js\");\n\nvar _OverviewActions2 = _interopRequireDefault(_OverviewActions);\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 * Copyright (C) 2018-2020. Huawei Technologies Co., Ltd. All rights reserved.\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 NodesMain = function (_React$Component) {\n _inherits(NodesMain, _React$Component);\n\n function NodesMain(props) {\n _classCallCheck(this, NodesMain);\n\n var _this = _possibleConstructorReturn(this, (NodesMain.__proto__ || Object.getPrototypeOf(NodesMain)).call(this, props));\n\n _this.state = {\n tableData: []\n };\n _this._onChange = _this._onChange.bind(_this);\n _this.lineDatas = _this.lineDatas.bind(_this);\n return _this;\n }\n\n _createClass(NodesMain, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n _OverviewStore2.default.listen(this._onChange);\n this.lineDatas();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n _OverviewStore2.default.unlisten(this._onChange);\n clearInterval(this.state.timer);\n }\n\n //obtained data per sec\n\n }, {\n key: \"lineDatas\",\n value: function lineDatas() {\n this.state.timer = setInterval(function () {\n _OverviewActions2.default.getData();\n _OverviewActions2.default.getMemoryData();\n }, 1000);\n }\n }, {\n key: \"_onChange\",\n value: function _onChange(data) {\n var table = [];\n if (data.memoryData) {\n Object.keys(data.memoryData).map(function (key) {\n var obj = {};\n // obj.id = key.slice(0, key.indexOf(\" \"));\n obj.id = data.memoryData[key].id;\n obj.ip = key.slice(key.indexOf(\"[\") + 1, key.indexOf(\"]\"));\n obj.role = key.slice(key.indexOf(\"]\") + 2);\n obj.count = data.memoryData[key].availableProcessors;\n var totalMemory = data.memoryData[key].totalNodeMemory.slice(0, -1);\n obj.nodeMemory = totalMemory;\n obj.freeMemory = data.memoryData[key].pools.general.freeBytes + (data.memoryData[key].pools.reserved ? data.memoryData[key].pools.reserved.freeBytes : 0);\n obj.usedMemory = data.memoryData[key].pools.general.reservedBytes + (data.memoryData[key].pools.reserved ? data.memoryData[key].pools.reserved.reservedBytes : 0);\n obj.state = data.memoryData[key].state;\n table.push(obj);\n });\n }\n this.setState({\n tableData: table\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n return _react2.default.createElement(\n \"div\",\n null,\n _react2.default.createElement(\n \"div\",\n { className: \"flex flex-row flex-initial header\" },\n _react2.default.createElement(_Header2.default, null)\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"nodes\" },\n _react2.default.createElement(_NavigationMenu2.default, { active: \"nodes\" }),\n _react2.default.createElement(\n \"div\",\n { className: \"line-right\" },\n _react2.default.createElement(\n \"div\",\n { className: \"line-show\" },\n _react2.default.createElement(\n \"div\",\n { className: \"summary-table\" },\n _react2.default.createElement(\n \"h3\",\n null,\n \"Cluster Nodes\"\n ),\n _react2.default.createElement(\n \"table\",\n { className: \"table\" },\n _react2.default.createElement(\n \"thead\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"th\",\n null,\n \"ID\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"IP\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"Role\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"CPU Count\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"Usable Node Memory\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"Used Memory\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"Free Memory\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"State\"\n )\n )\n ),\n _react2.default.createElement(\n \"tbody\",\n null,\n this.state.tableData.map(function (ele, index) {\n return _react2.default.createElement(\n \"tr\",\n { key: index },\n _react2.default.createElement(\n \"td\",\n null,\n ele.id\n ),\n _react2.default.createElement(\n \"td\",\n null,\n ele.ip\n ),\n _react2.default.createElement(\n \"td\",\n null,\n ele.role\n ),\n _react2.default.createElement(\n \"td\",\n null,\n ele.count\n ),\n _react2.default.createElement(\n \"td\",\n null,\n (0, _utils.formatDataSizeBytes)(ele.nodeMemory)\n ),\n _react2.default.createElement(\n \"td\",\n null,\n (0, _utils.formatDataSizeBytes)(ele.usedMemory)\n ),\n _react2.default.createElement(\n \"td\",\n null,\n (0, _utils.formatDataSizeBytes)(ele.freeMemory)\n ),\n _react2.default.createElement(\n \"td\",\n null,\n ele.state\n )\n );\n })\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"flex flex-row flex-initial statusFooter\" },\n _react2.default.createElement(_StatusFooter2.default, null)\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"flex flex-row flex-initial footer\" },\n _react2.default.createElement(_Footer2.default, null)\n )\n );\n }\n }]);\n\n return NodesMain;\n}(_react2.default.Component);\n\nexports.default = NodesMain;\n\n//# sourceURL=webpack:///./overview/NodesMain.jsx?"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\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 _Header = __webpack_require__(/*! ../queryeditor/components/Header */ \"./queryeditor/components/Header.jsx\");\n\nvar _Header2 = _interopRequireDefault(_Header);\n\nvar _Footer = __webpack_require__(/*! ../queryeditor/components/Footer */ \"./queryeditor/components/Footer.jsx\");\n\nvar _Footer2 = _interopRequireDefault(_Footer);\n\nvar _StatusFooter = __webpack_require__(/*! ../queryeditor/components/StatusFooter */ \"./queryeditor/components/StatusFooter.jsx\");\n\nvar _StatusFooter2 = _interopRequireDefault(_StatusFooter);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./utils.js\");\n\nvar _NavigationMenu = __webpack_require__(/*! ../NavigationMenu */ \"./NavigationMenu.jsx\");\n\nvar _NavigationMenu2 = _interopRequireDefault(_NavigationMenu);\n\nvar _OverviewStore = __webpack_require__(/*! ../overview/OverviewStore */ \"./overview/OverviewStore.js\");\n\nvar _OverviewStore2 = _interopRequireDefault(_OverviewStore);\n\nvar _OverviewActions = __webpack_require__(/*! ./OverviewActions */ \"./overview/OverviewActions.js\");\n\nvar _OverviewActions2 = _interopRequireDefault(_OverviewActions);\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 * Copyright (C) 2018-2020. Huawei Technologies Co., Ltd. All rights reserved.\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 NodesMain = function (_React$Component) {\n _inherits(NodesMain, _React$Component);\n\n function NodesMain(props) {\n _classCallCheck(this, NodesMain);\n\n var _this = _possibleConstructorReturn(this, (NodesMain.__proto__ || Object.getPrototypeOf(NodesMain)).call(this, props));\n\n _this.state = {\n tableData: []\n };\n _this._onChange = _this._onChange.bind(_this);\n _this.lineDatas = _this.lineDatas.bind(_this);\n return _this;\n }\n\n _createClass(NodesMain, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n _OverviewStore2.default.listen(this._onChange);\n this.lineDatas();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n _OverviewStore2.default.unlisten(this._onChange);\n clearInterval(this.state.timer);\n }\n\n //obtained data per sec\n\n }, {\n key: \"lineDatas\",\n value: function lineDatas() {\n this.state.timer = setInterval(function () {\n _OverviewActions2.default.getData();\n _OverviewActions2.default.getMemoryData();\n }, 1000);\n }\n }, {\n key: \"_onChange\",\n value: function _onChange(data) {\n var table = [];\n if (data.memoryData) {\n Object.keys(data.memoryData).map(function (key) {\n var obj = {};\n obj.id = data.memoryData[key].id;\n obj.ip = key;\n obj.role = data.memoryData[key].role;\n obj.count = data.memoryData[key].availableProcessors;\n var totalMemory = data.memoryData[key].totalNodeMemory.slice(0, -1);\n obj.nodeMemory = totalMemory;\n obj.freeMemory = data.memoryData[key].pools.general.freeBytes + (data.memoryData[key].pools.reserved ? data.memoryData[key].pools.reserved.freeBytes : 0);\n obj.usedMemory = data.memoryData[key].pools.general.reservedBytes + (data.memoryData[key].pools.reserved ? data.memoryData[key].pools.reserved.reservedBytes : 0);\n obj.state = data.memoryData[key].state;\n table.push(obj);\n });\n }\n this.setState({\n tableData: table\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n return _react2.default.createElement(\n \"div\",\n null,\n _react2.default.createElement(\n \"div\",\n { className: \"flex flex-row flex-initial header\" },\n _react2.default.createElement(_Header2.default, null)\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"nodes\" },\n _react2.default.createElement(_NavigationMenu2.default, { active: \"nodes\" }),\n _react2.default.createElement(\n \"div\",\n { className: \"line-right\" },\n _react2.default.createElement(\n \"div\",\n { className: \"line-show\" },\n _react2.default.createElement(\n \"div\",\n { className: \"summary-table\" },\n _react2.default.createElement(\n \"h3\",\n null,\n \"Cluster Nodes\"\n ),\n _react2.default.createElement(\n \"table\",\n { className: \"table\" },\n _react2.default.createElement(\n \"thead\",\n null,\n _react2.default.createElement(\n \"tr\",\n null,\n _react2.default.createElement(\n \"th\",\n null,\n \"ID\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"IP\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"Role\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"CPU Count\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"Usable Node Memory\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"Used Memory\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"Free Memory\"\n ),\n _react2.default.createElement(\n \"th\",\n null,\n \"State\"\n )\n )\n ),\n _react2.default.createElement(\n \"tbody\",\n null,\n this.state.tableData.map(function (ele, index) {\n return _react2.default.createElement(\n \"tr\",\n { key: index },\n _react2.default.createElement(\n \"td\",\n null,\n ele.id\n ),\n _react2.default.createElement(\n \"td\",\n null,\n ele.ip\n ),\n _react2.default.createElement(\n \"td\",\n null,\n ele.role\n ),\n _react2.default.createElement(\n \"td\",\n null,\n ele.count\n ),\n _react2.default.createElement(\n \"td\",\n null,\n (0, _utils.formatDataSizeBytes)(ele.nodeMemory)\n ),\n _react2.default.createElement(\n \"td\",\n null,\n (0, _utils.formatDataSizeBytes)(ele.usedMemory)\n ),\n _react2.default.createElement(\n \"td\",\n null,\n (0, _utils.formatDataSizeBytes)(ele.freeMemory)\n ),\n _react2.default.createElement(\n \"td\",\n null,\n ele.state\n )\n );\n })\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"flex flex-row flex-initial statusFooter\" },\n _react2.default.createElement(_StatusFooter2.default, null)\n ),\n _react2.default.createElement(\n \"div\",\n { className: \"flex flex-row flex-initial footer\" },\n _react2.default.createElement(_Footer2.default, null)\n )\n );\n }\n }]);\n\n return NodesMain;\n}(_react2.default.Component);\n\nexports.default = NodesMain;\n\n//# sourceURL=webpack:///./overview/NodesMain.jsx?"); /***/ }), diff --git a/presto-main/src/main/resources/webapp/src/overview/NodesMain.jsx b/presto-main/src/main/resources/webapp/src/overview/NodesMain.jsx index f84c5b764..5a43745d3 100644 --- a/presto-main/src/main/resources/webapp/src/overview/NodesMain.jsx +++ b/presto-main/src/main/resources/webapp/src/overview/NodesMain.jsx @@ -16,7 +16,7 @@ import React from "react"; import Header from '../queryeditor/components/Header'; import Footer from "../queryeditor/components/Footer"; import StatusFooter from "../queryeditor/components/StatusFooter"; -import { formatDataSizeBytes } from "../utils"; +import {formatDataSizeBytes} from "../utils"; import NavigationMenu from "../NavigationMenu"; import OverviewStore from "../overview/OverviewStore"; import OverviewActions from "./OverviewActions"; @@ -30,6 +30,7 @@ class NodesMain extends React.Component { this._onChange = this._onChange.bind(this); this.lineDatas = this.lineDatas.bind(this); } + componentDidMount() { OverviewStore.listen(this._onChange); this.lineDatas(); @@ -53,10 +54,9 @@ class NodesMain extends React.Component { if (data.memoryData) { Object.keys(data.memoryData).map(key => { let obj = {}; - // obj.id = key.slice(0, key.indexOf(" ")); obj.id = data.memoryData[key].id; - obj.ip = key.slice(key.indexOf("[") + 1, key.indexOf("]")); - obj.role = key.slice(key.indexOf("]") + 2); + obj.ip = key; + obj.role = data.memoryData[key].role; obj.count = data.memoryData[key].availableProcessors; let totalMemory = data.memoryData[key].totalNodeMemory.slice(0, -1); obj.nodeMemory = totalMemory; @@ -75,40 +75,40 @@ class NodesMain extends React.Component { return (
-
+
- +

Cluster Nodes

- - - - - - - - - - + + + + + + + + + + - {this.state.tableData.map((ele, index) => ( - - - - - - - - - - - ))} + {this.state.tableData.map((ele, index) => ( + + + + + + + + + + + ))}
IDIPRoleCPU CountUsable Node MemoryUsed MemoryFree MemoryState
IDIPRoleCPU CountUsable Node MemoryUsed MemoryFree MemoryState
{ele.id}{ele.ip}{ele.role}{ele.count}{formatDataSizeBytes(ele.nodeMemory)}{formatDataSizeBytes(ele.usedMemory)}{formatDataSizeBytes(ele.freeMemory)}{ele.state}
{ele.id}{ele.ip}{ele.role}{ele.count}{formatDataSizeBytes(ele.nodeMemory)}{formatDataSizeBytes(ele.usedMemory)}{formatDataSizeBytes(ele.freeMemory)}{ele.state}
@@ -116,10 +116,10 @@ class NodesMain extends React.Component {
- +
-
)