diff --git a/web/config/router.config.js b/web/config/router.config.js
index e70f7d7c..08f6a880 100644
--- a/web/config/router.config.js
+++ b/web/config/router.config.js
@@ -32,7 +32,7 @@ export default [
}, {
path: '/platform/cluster',
name: 'cluster',
- component: './Dashboard/Monitor',
+ component: './Dashboard/ClusterMonitor',
}, {
path: '/platform/tasks',
name: 'tasks',
diff --git a/web/src/pages/Dashboard/ClusterMonitor.js b/web/src/pages/Dashboard/ClusterMonitor.js
index 2f7a05d5..e98da12e 100644
--- a/web/src/pages/Dashboard/ClusterMonitor.js
+++ b/web/src/pages/Dashboard/ClusterMonitor.js
@@ -1,46 +1,370 @@
-import React, { PureComponent } from 'react';
+import React, { PureComponent,Fragment } from 'react';
import { connect } from 'dva';
import { formatMessage, FormattedMessage } from 'umi/locale';
-import { Row, Col, Card, Tooltip } from 'antd';
-import numeral from 'numeral';
-import { Pie, WaterWave, Gauge, TagCloud } from '@/components/Charts';
-import NumberInfo from '@/components/NumberInfo';
-import CountDown from '@/components/CountDown';
-import ActiveChart from '@/components/ActiveChart';
-import GridContent from '@/components/PageHeaderWrapper/GridContent';
+import { Row, Col, Card } from 'antd';
-import Authorized from '@/utils/Authorized';
-import styles from './Monitor.less';
+import {
+ G2,
+ Chart,
+ Geom,
+ Axis,
+ Tooltip,
+ Legend,
+} from 'bizcharts';
-const { Secured } = Authorized;
+let generateHeapData = (target)=>{
+ let data = [];
+ let generator = (initTime) => {
+ var now = new Date();
+ var time = initTime||now.getTime();
+ var heap1 = ~~(Math.random() * 500) + 200;
+ var heap2 = ~~(Math.random() * 300) + 512;
+ if (data.length >= 120) {
+ data.shift();
+ data.shift();
+ }
-const targetTime = new Date().getTime() + 3900000;
+ data.push({
+ time: time,
+ heap_ratio: (heap1 *100) /1024,
+ type: "node1"
+ });
+ data.push({
+ time: time,
+ heap_ratio: (heap2 *100)/1024,
+ type: "node2"
+ });
+ !initTime && target.setState({
+ data
+ });
+ };
+ let stime = new Date();
+ for(let i=120;i>0;i--){
+ generator(new Date(stime.valueOf()- i * 1000 * 30));
+ }
+ target.setState({
+ data
+ });
+ setInterval(()=>{generator(null)}, 30000);
+}
-// use permission as a parameter
-const havePermissionAsync = new Promise(resolve => {
- // Call resolve on behalf of passed
- setTimeout(() => resolve(), 300);
-});
+let generateCpuData = (target)=>{
+ let data = [];
+ let generator = (initTime) => {
+ var now = new Date();
+ var time = initTime || now.getTime();
+ var cpu1 = ~~(Math.random()*5) + 0.1;
+ var cpu2 = ~~(Math.random()*3) +0.2;
+ if (data.length >= 120) {
+ data.shift();
+ data.shift();
+ }
-@Secured(havePermissionAsync)
-@connect(({ monitor, loading }) => ({
- monitor,
- loading: loading.models.monitor,
-}))
+ data.push({
+ time: time,
+ cpu_ratio: cpu1,
+ type: "node1"
+ });
+ data.push({
+ time: time,
+ cpu_ratio: cpu2,
+ type: "node2"
+ });
+ !initTime && target.setState({
+ data
+ });
+ };
+ let stime = new Date();
+ for(let i=120;i>0;i--){
+ generator(new Date(stime.valueOf()- i * 1000 * 30));
+ }
+ target.setState({
+ data
+ });
+ setInterval(()=>{generator(null)}, 30000);
+}
+
+let generateSearchLatencyData = (target)=>{
+ let data = [];
+ let generator = (initTime) => {
+ var now = new Date();
+ var time = initTime || now.getTime();
+ var latency1 = ~~(Math.random()*100) + 10;
+ var latency2 = ~~(Math.random()*150) +30;
+ if (data.length >= 120) {
+ data.shift();
+ data.shift();
+ }
+
+ data.push({
+ time: time,
+ latency: latency1,
+ type: "node1"
+ });
+ data.push({
+ time: time,
+ latency: latency2,
+ type: "node2"
+ });
+ !initTime && target.setState({
+ data
+ });
+ };
+ let stime = new Date();
+ for(let i=120;i>0;i--){
+ generator(new Date(stime.valueOf()- i * 1000 * 30));
+ }
+ target.setState({
+ data
+ });
+ setInterval(()=>{generator(null)}, 30000);
+}
+
+let generateIndexLatencyData = (target)=>{
+ let data = [];
+ let generator = (initTime) => {
+ var now = new Date();
+ var time = initTime || now.getTime();
+ var latency1 = ~~(Math.random()*400) + 50;
+ var latency2 = ~~(Math.random()*500) +20;
+ if (data.length >= 120) {
+ data.shift();
+ data.shift();
+ }
+
+ data.push({
+ time: time,
+ latency: latency1,
+ type: "node1"
+ });
+ data.push({
+ time: time,
+ latency: latency2,
+ type: "node2"
+ });
+ !initTime && target.setState({
+ data
+ });
+ };
+
+ let stime = new Date();
+ for(let i=120;i>0;i--){
+ generator(new Date(stime.valueOf()- i * 1000 * 30));
+ }
+ target.setState({
+ data
+ });
+ setInterval(()=>{generator(null)}, 30000);
+}
+
+
+
+ class SliderChart extends React.Component {
+ constructor() {
+ super();
+ this.state = {
+ data:[],
+ };
+ }
+
+ componentDidMount() {
+ let {generateFunc }= this.props;
+ generateFunc(this);
+ }
+ render() {
+ //console.log(data.length)
+ const grid = {
+ align: 'center',
+ type: 'line' ,
+ lineStyle: {
+ stroke: '#d9d9d9',
+ lineWidth: 1,
+ }
+ };
+ let {xname, yname, scale, unit} = this.props;
+ const axisLabel = {
+ formatter(text){
+ return `${text}${unit}`;
+ }
+ };
+ const axisTitle = {
+ textStyle:{
+ fill: '#999',
+ },
+ }
+
+ let pos = `${xname}*${yname}`;
+ return (
+
+ {this.props.title}
+
+