From b8f1297a19b869ecd2f1febece6f43a6e55d8360 Mon Sep 17 00:00:00 2001 From: silenceqi Date: Mon, 30 Aug 2021 16:19:47 +0800 Subject: [PATCH] modify cluster manage --- web/src/assets/cluster_bg.png | Bin 0 -> 15629 bytes .../kibana/console/components/Console.tsx | 2 +- .../request_status_bar/request_status_bar.tsx | 7 + .../public/query/timefilter/timefilter.ts | 7 +- web/src/models/global.js | 2 + web/src/pages/DataManagement/context.js | 2 +- web/src/pages/System/Cluster/Form.js | 57 ++++++- web/src/pages/System/Cluster/Index.js | 143 +++++++++++------- web/src/pages/System/Cluster/Step.js | 15 +- web/src/pages/System/Cluster/health_status.js | 3 + .../pages/System/Cluster/models/cluster.js | 9 +- .../pages/System/Cluster/steps/extra_step.js | 20 ++- 12 files changed, 192 insertions(+), 75 deletions(-) create mode 100644 web/src/assets/cluster_bg.png create mode 100644 web/src/pages/System/Cluster/health_status.js diff --git a/web/src/assets/cluster_bg.png b/web/src/assets/cluster_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..0aaa07e4a2cac98c77c2797634d9ff536c2ac816 GIT binary patch literal 15629 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 y%YQ0R`4eC8z}d{ybSa^`!}+ { export const RequestStatusBar: FunctionComponent = ({ requestInProgress, requestResult, + selectedCluster, }) => { let content: React.ReactNode = null; + const clusterContent = ( + + {selectedCluster.endpoint} - {selectedCluster.version} + +); if (requestInProgress) { content = ( @@ -122,6 +128,7 @@ export const RequestStatusBar: FunctionComponent = ({ gutterSize="s" responsive={false} > + {clusterContent} {content} ); diff --git a/web/src/components/kibana/data/public/query/timefilter/timefilter.ts b/web/src/components/kibana/data/public/query/timefilter/timefilter.ts index 5eb1546f..e850c706 100644 --- a/web/src/components/kibana/data/public/query/timefilter/timefilter.ts +++ b/web/src/components/kibana/data/public/query/timefilter/timefilter.ts @@ -23,7 +23,9 @@ import moment from 'moment'; import { areRefreshIntervalsDifferent, areTimeRangesDifferent } from './lib/diff_time_picker_vals'; import { getForceNow } from './lib/get_force_now'; import { TimefilterConfig, InputTimeRange, TimeRangeBounds } from './types'; -import { calculateBounds, getTime, RefreshInterval, TimeRange } from '../../../common'; +import { getTime, RefreshInterval, TimeRange } from '../../../common'; +import { calculateBounds } from '../../../common/query/timefilter/get_time'; + import { TimeHistoryContract } from './time_history'; import { IndexPattern } from '../../index_patterns'; @@ -173,6 +175,9 @@ export class Timefilter { } public calculateBounds(timeRange: TimeRange): TimeRangeBounds { + if(typeof calculateBounds !== 'function'){ + console.log(typeof(calculateBounds), calculateBounds) + } return calculateBounds(timeRange, { forceNow: this.getForceNow() }); } diff --git a/web/src/models/global.js b/web/src/models/global.js index b7da15d8..3d827f08 100644 --- a/web/src/models/global.js +++ b/web/src/models/global.js @@ -53,6 +53,8 @@ export default { return { name: item.name, id: item.id, + endpoint: item.endpoint, + version: item.version, }; }) diff --git a/web/src/pages/DataManagement/context.js b/web/src/pages/DataManagement/context.js index d1999f45..fc34f797 100644 --- a/web/src/pages/DataManagement/context.js +++ b/web/src/pages/DataManagement/context.js @@ -164,7 +164,7 @@ const filterManager = new FilterManager(); const storage = new Storage(localStorage); const queryStringManager = new QueryStringManager(storage); const timefilterConfig = { - timeDefaults: { from: 'now-1y', to: 'now' }, + timeDefaults: { from: 'now-15m', to: 'now' }, refreshIntervalDefaults: { pause: true, value: 10000 }, }; const timeHistory = new TimeHistory(storage); diff --git a/web/src/pages/System/Cluster/Form.js b/web/src/pages/System/Cluster/Form.js index dff6afda..1d71310d 100644 --- a/web/src/pages/System/Cluster/Form.js +++ b/web/src/pages/System/Cluster/Form.js @@ -1,10 +1,11 @@ import React from 'react'; -import {Card, Form, Icon, Input, InputNumber, Button, Switch, message} from 'antd'; +import {Card, Form, Icon, Input, InputNumber, Button, Switch, message, Spin} from 'antd'; import router from 'umi/router'; import styles from './Form.less'; import {connect} from "dva"; import NewCluster from './Step'; +import PageHeaderWrapper from '@/components/PageHeaderWrapper'; @Form.create() @connect(({clusterConfig}) =>({ @@ -21,6 +22,7 @@ class ClusterForm extends React.Component{ this.state = { confirmDirty: false, needAuth: needAuth, + isLoading: false, } } componentDidMount() { @@ -61,6 +63,7 @@ class ClusterForm extends React.Component{ description: values.description, enabled: values.enabled, monitored: values.monitored, + version: values.version, schema: values.isTLS === true ? 'https': 'http', // order: values.order, } @@ -95,6 +98,40 @@ class ClusterForm extends React.Component{ }) } + tryConnect = async ()=>{ + const {dispatch, form} = this.props; + const values = await form.validateFields((errors, values) => { + if(errors){ + return false; + } + let newVals = { + name: values.name, + host: values.host, + basic_auth: { + username: values.username, + password: values.password, + }, + schema: values.isTLS === true ? 'https': 'http', + } + return values; + }); + if(!values){ + return + } + this.setState({isLoading: true}) + const res = await dispatch({ + type: 'clusterConfig/doTryConnect', + payload: values + }); + if(res){ + message.success('连接成功!') + form.setFieldsValue({ + version: res.version + }) + } + this.setState({isLoading: false}) + } + render() { const {getFieldDecorator} = this.props.form; const formItemLayout = { @@ -121,11 +158,13 @@ class ClusterForm extends React.Component{ }; const {editValue, editMode} = this.props.clusterConfig; return ( + { router.push('/system/cluster'); }}>返回]} > +
{getFieldDecorator('name', { @@ -154,6 +193,13 @@ class ClusterForm extends React.Component{ ], })()} + + {getFieldDecorator('version', { + initialValue: editValue.version, + rules: [ + ], + })()} + {getFieldDecorator('isTLS', { initialValue: editValue?.schema === "https", @@ -175,14 +221,14 @@ class ClusterForm extends React.Component{ {this.state.needAuth === true ? (
{getFieldDecorator('username', { - initialValue: editValue.basic_auth.username, + initialValue: editValue.basic_auth?.username, rules: [ ], })()} {getFieldDecorator('password', { - initialValue: editValue.basic_auth.password, + initialValue: editValue.basic_auth?.password, rules: [ ], })()} @@ -220,9 +266,14 @@ class ClusterForm extends React.Component{ + + + ) } } diff --git a/web/src/pages/System/Cluster/Index.js b/web/src/pages/System/Cluster/Index.js index 93dba2d3..24572475 100644 --- a/web/src/pages/System/Cluster/Index.js +++ b/web/src/pages/System/Cluster/Index.js @@ -2,10 +2,27 @@ import React from 'react'; import {Button, Card, Col, Divider, Form, Input, Row, Table, Switch, Icon, Popconfirm, message} from "antd"; import Link from "umi/link"; import {connect} from "dva"; +import {HealthStatusCircle} from './health_status'; +import PageHeaderWrapper from '@/components/PageHeaderWrapper'; +import styles from './step.less'; +import clusterBg from '@/assets/cluster_bg.png'; -const HealthStatusCircle = ({status})=>{ - return
-} +const content = ( +
+

+ 集群管理通过注册新集群,删除集群让您高效的管理多个 Elasticsearch 集群。 +

+
+); + +const extraContent = ( +
+ 集群管理 +
+); @Form.create() @connect(({clusterConfig}) =>({ @@ -18,10 +35,15 @@ class Index extends React.Component { key: 'name', },{ title: '健康状态', - dataIndex: 'status.health_status', + dataIndex: 'id', key: 'health_status', render: (val)=>{ - return + const {clusterStatus} = this.props.clusterConfig; + if(!clusterStatus || !clusterStatus[val]){ + return + } + const status = clusterStatus[val].health_status; + return } },{ title: '所属业务', @@ -54,10 +76,14 @@ class Index extends React.Component { // } },{ title: '节点数', - dataIndex: 'node_count', + dataIndex: 'id', key: 'mode_count', - render: ()=>{ - return 1; + render: (val)=>{ + const {clusterStatus} = this.props.clusterConfig; + if(!clusterStatus || !clusterStatus[val]){ + return + } + return clusterStatus[val].nodes_count; } },{ title: '集群地址', @@ -69,7 +95,7 @@ class Index extends React.Component { dataIndex: 'monitored', key: 'monitored', render: (val) => { - return val? '是': '否'; + return val? '启用': '关闭'; } }, // { @@ -114,15 +140,26 @@ class Index extends React.Component { }) } componentDidMount() { + this.fetchData({}) + this.fetchClusterStatus(); + } + componentWillUnmount(){ + if(this.fetchClusterStatusTimer){ + clearTimeout(this.fetchClusterStatusTimer); + } + } + fetchClusterStatus = async ()=>{ const {dispatch} = this.props; - dispatch({ + const res = await dispatch({ type: 'clusterConfig/fetchClusterStatus', - }).then(()=>{ - if(typeof this.props.clusterConfig.data === 'undefined') { - this.fetchData({}) - } - }) - + }); + if(this.fetchClusterStatusTimer){ + clearTimeout(this.fetchClusterStatusTimer); + } + if(!res){ + return + } + this.fetchClusterStatusTimer = setTimeout(this.fetchClusterStatus, 10000); } handleSearchClick = ()=>{ @@ -185,43 +222,45 @@ class Index extends React.Component { }; const {data} = this.props.clusterConfig; return ( - -
-
-
- - - - {getFieldDecorator('name')()} - - - -
- -
- -
-
+ + +
+
+
+ + + + {getFieldDecorator('name')()} + + + +
+ +
+ +
+
+
+
+ {/* } + unCheckedChildren={} + onChange={this.handleEnabledChange} + defaultChecked + />是否启用 */} + +
-
- } - unCheckedChildren={} - onChange={this.handleEnabledChange} - defaultChecked - />是否启用 - -
-
- - +
+ + ); } diff --git a/web/src/pages/System/Cluster/Step.js b/web/src/pages/System/Cluster/Step.js index fe9c73cb..5188dba9 100644 --- a/web/src/pages/System/Cluster/Step.js +++ b/web/src/pages/System/Cluster/Step.js @@ -4,20 +4,19 @@ import { useState, useRef } from 'react'; import {InitialStep, ExtraStep, ResultStep} from './steps'; import PageHeaderWrapper from '@/components/PageHeaderWrapper'; import styles from './step.less'; +import clusterBg from '@/assets/cluster_bg.png'; const { Step } = Steps; const steps = [ { - title: '初始化', + title: '连接', }, { - title: '信息确认', - content: 'Second-content', + title: '确认', }, { title: '完成', - content: 'Last-content', }, ]; @@ -152,7 +151,7 @@ const ClusterStep = ({

输入集群地址和身份验证信息分步创建集群。

- */} ); const extraContent = (
这是一个标题
); diff --git a/web/src/pages/System/Cluster/health_status.js b/web/src/pages/System/Cluster/health_status.js new file mode 100644 index 00000000..613c6234 --- /dev/null +++ b/web/src/pages/System/Cluster/health_status.js @@ -0,0 +1,3 @@ +export const HealthStatusCircle = ({status})=>{ + return
+} \ No newline at end of file diff --git a/web/src/pages/System/Cluster/models/cluster.js b/web/src/pages/System/Cluster/models/cluster.js index b9123f17..c2117e6d 100644 --- a/web/src/pages/System/Cluster/models/cluster.js +++ b/web/src/pages/System/Cluster/models/cluster.js @@ -21,7 +21,8 @@ export default { payload: { clusterStatus: res } - }) + }); + return res; }, *fetchClusterList({payload}, {call, put, select}){ let res = yield call(searchClusterConfig, payload); @@ -31,9 +32,9 @@ export default { } res = formatESSearchResult(res) const {clusterStatus} = yield select(state => state.clusterConfig); - for(let item of res.data){ - item.status= clusterStatus[item.id] - } + // for(let item of res.data){ + // item.status= clusterStatus[item.id] + // } yield put({ type: 'saveData', payload: res diff --git a/web/src/pages/System/Cluster/steps/extra_step.js b/web/src/pages/System/Cluster/steps/extra_step.js index d5a17ef3..5ed9f976 100644 --- a/web/src/pages/System/Cluster/steps/extra_step.js +++ b/web/src/pages/System/Cluster/steps/extra_step.js @@ -1,4 +1,5 @@ import {Form, Input, Switch, Icon, InputNumber, Divider, Descriptions} from 'antd'; +import {HealthStatusCircle} from '../health_status'; @Form.create() export class ExtraStep extends React.Component { @@ -19,19 +20,28 @@ export class ExtraStep extends React.Component { return ( <> + + {initialValue?.host} + + + {initialValue?.isTLS ? : null} + {initialValue?.version} - - - {initialValue?.status} - + + {initialValue?.username ? : null} + + + + + {initialValue?.number_of_nodes} {initialValue?.number_of_data_nodes} - + {initialValue?.active_shards}