diff --git a/api/index_management/indices.go b/api/index_management/indices.go
index 73e9d604..50970447 100644
--- a/api/index_management/indices.go
+++ b/api/index_management/indices.go
@@ -1,6 +1,7 @@
package index_management
import (
+ "fmt"
"net/http"
"strings"
@@ -107,4 +108,32 @@ func (handler APIHandler) HandleDeleteIndexAction(w http.ResponseWriter, req *ht
}
resBody["payload"] = true
handler.WriteJSON(w, resBody, http.StatusOK)
+}
+
+func (handler APIHandler) HandleCreateIndexAction(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
+ defer func() {
+ if err := recover(); err != nil {
+ fmt.Println(err)
+ }
+ }()
+ client := elastic.GetClient(handler.Config.Elasticsearch)
+ indexName := ps.ByName("index")
+ resBody := newResponseBody()
+ config := map[string]interface{}{}
+ err := handler.DecodeJSON(req, &config)
+ if err != nil {
+ resBody["status"] = false
+ resBody["error"] = err
+ handler.WriteJSON(w, resBody, http.StatusOK)
+ return
+ }
+ err = client.CreateIndex(indexName, config)
+ if err != nil {
+ resBody["status"] = false
+ resBody["error"] = err
+ handler.WriteJSON(w, resBody, http.StatusOK)
+ return
+ }
+ resBody["payload"] = true
+ handler.WriteJSON(w, resBody, http.StatusOK)
}
\ No newline at end of file
diff --git a/api/init.go b/api/init.go
index 9a15b7f0..7e489256 100644
--- a/api/init.go
+++ b/api/init.go
@@ -34,6 +34,7 @@ func Init(cfg *config.AppConfig) {
ui.HandleUIMethod(api.GET, pathPrefix+"index/:index/_settings", handler.HandleGetSettingsAction)
ui.HandleUIMethod(api.PUT, pathPrefix+"index/:index/_settings", handler.HandleUpdateSettingsAction)
ui.HandleUIMethod(api.DELETE, pathPrefix+"index/:index", handler.HandleDeleteIndexAction)
+ ui.HandleUIMethod(api.POST, pathPrefix+"index/:index", handler.HandleCreateIndexAction)
task.RegisterScheduleTask(task.ScheduleTask{
Description: "sync reindex task result to index infinireindex",
diff --git a/web/src/pages/DataManagement/Document.js b/web/src/pages/DataManagement/Document.js
index 8ed73cad..6a9f4e6a 100644
--- a/web/src/pages/DataManagement/Document.js
+++ b/web/src/pages/DataManagement/Document.js
@@ -426,6 +426,9 @@ class Doucment extends React.Component {
return;
}
let {indices, mappings} = document;
+ if(!indices){
+ return
+ }
let _index = indices[0];
if(indices && indices.length > 1){
//console.log(this.indexSelEl);
diff --git a/web/src/pages/DataManagement/Index.js b/web/src/pages/DataManagement/Index.js
index 761b674c..1a5ee556 100644
--- a/web/src/pages/DataManagement/Index.js
+++ b/web/src/pages/DataManagement/Index.js
@@ -55,82 +55,56 @@ class JSONWrapper extends PureComponent {
)
}
}
-
-const CreateForm = Form.create()(props => {
- const { modalVisible, form, handleAdd, handleModalVisible } = props;
- const okHandle = () => {
+@Form.create()
+class CreateForm extends React.Component {
+ okHandle = () => {
+ const {handleAdd, form} = this.props;
form.validateFields((err, fieldsValue) => {
if (err) return;
form.resetFields();
+ fieldsValue['config'] = this.editorValueGetter();
handleAdd(fieldsValue);
});
};
- return (
- handleModalVisible()}
- >
-
- {form.getFieldDecorator('index', {
- rules: [{ required: true, message: '请输入至少五个字符的名称!', min: 5 }],
- })()}
-
-
- {form.getFieldDecorator('settings', {
- rules: [{ required: true }],
- })()}
-
-
- );
-});
-const UpdateForm = Form.create()(props => {
- const { updateModalVisible, handleUpdateModalVisible, handleUpdate,values,form } = props;
+ render() {
+ const {modalVisible, form, handleModalVisible} = this.props;
+ return (
+ handleModalVisible()}
+ >
+
+ {form.getFieldDecorator('index', {
+ rules: [{required: true, message: '请输入至少五个字符的名称!', min: 5}],
+ })()}
+
+
+
+ {this.editorValueGetter=valueGetter}}
+ />
+
+
+
+ );
+ }
+}
- const okHandle = () => {
- form.validateFields((err, fieldsValue) => {
- if (err) return;
- form.resetFields();
- handleUpdate(fieldsValue);
- });
- };
-
- return (
- handleUpdateModalVisible()}
- >
-
- {form.getFieldDecorator('index', {
- initialValue: values.index,
- rules: [{ required: true, message: '请输入至少五个字符的名称!', min: 5 }],
- })()}
-
-
- {form.getFieldDecorator('settings', {
- initialValue: values.processors,
- rules: [{ required: true }],
- })()}
-
-
- );
-});
/* eslint react/no-multi-comp:0 */
@connect(({ index }) => ({
@@ -143,7 +117,6 @@ class Index extends PureComponent {
updateModalVisible: false,
expandForm: false,
formValues: {},
- updateFormValues: {},
drawerVisible: false,
editingIndex:{},
indexActiveKey: '1',
@@ -190,6 +163,10 @@ class Index extends PureComponent {
];
componentDidMount() {
+ this.fetchData()
+ }
+
+ fetchData = ()=>{
const { dispatch } = this.props;
dispatch({
type: 'index/fetchIndices',
@@ -205,10 +182,6 @@ class Index extends PureComponent {
this.setState({
formValues: {},
});
- dispatch({
- type: 'pipeline/fetch',
- payload: {},
- });
};
handleDeleteClick = (indexName) => {
@@ -240,74 +213,18 @@ class Index extends PureComponent {
});
};
- handleUpdateModalVisible = (flag, record) => {
- this.setState({
- updateModalVisible: !!flag,
- updateFormValues: record || {},
- });
- };
-
handleAdd = fields => {
const { dispatch } = this.props;
dispatch({
- type: 'pipeline/add',
+ type: 'index/addIndex',
payload: {
- name: fields.name,
- desc: fields.desc,
- processors: fields.processors,
+ index: fields.index,
+ config: JSON.parse(fields.config)
},
});
-
- message.success('添加成功');
this.handleModalVisible();
};
- handleUpdate = fields => {
- const { dispatch } = this.props;
- dispatch({
- type: 'pipeline/update',
- payload: {
- name: fields.name,
- desc: fields.desc,
- processors: fields.processors,
- },
- });
-
- message.success('修改成功');
- this.handleUpdateModalVisible();
- };
-
- renderSimpleForm() {
- const {
- form: { getFieldDecorator },
- } = this.props;
- return (
-
- );
- }
-
- renderForm() {
- return this.renderSimpleForm();
- }
-
handleIndexTabChanged = (activeKey, indexName) => {
this.setState({
indexActiveKey: activeKey,
@@ -335,8 +252,8 @@ class Index extends PureComponent {
})
}
}
- handleEditorDidMount = (_valueGetter)=>{
- this.indexSettingsGetter = _valueGetter;
+ handleEditorDidMount = (editorName, _valueGetter)=>{
+ this[editorName] = _valueGetter;
}
handleIndexSettingsSaveClick = (indexName)=>{
@@ -347,7 +264,7 @@ class Index extends PureComponent {
type: 'index/saveSettings',
payload: {
index: indexName,
- settings: settings.settings,
+ settings: settings,
}
})
}
@@ -377,35 +294,53 @@ class Index extends PureComponent {
if(settings && settings[editingIndex.index]){
newSettings = transformSettingsForApi(settings[editingIndex.index], editingIndex.status === 'open')
}
+ const {form: { getFieldDecorator }} = this.props;
return (
-
{this.renderForm()}
+
+
+
-
+
- {updateFormValues && Object.keys(updateFormValues).length ? (
-
- ) : null}
{
@@ -417,17 +352,17 @@ class Index extends PureComponent {
width={720}
>
{this.handleIndexTabChanged(activeKey, editingIndex.index)}}>
-
+
- {editingIndex.health}
- {editingIndex.status}
- {editingIndex.shards}
- {editingIndex.replicas}
- {editingIndex.docs_count}
- {editingIndex.docs_deleted}
-
-
-
+ {editingIndex.health}
+ {editingIndex.status}
+ {editingIndex.shards}
+ {editingIndex.replicas}
+ {editingIndex.docs_count}
+ {editingIndex.docs_deleted}
+
+
+
@@ -462,7 +397,7 @@ class Index extends PureComponent {
tabSize: 2,
wordBasedSuggestions: true,
}}
- editorDidMount={this.handleEditorDidMount}
+ editorDidMount={(valueGetter)=>this.handleEditorDidMount('indexSettingsGetter', valueGetter)}
/>
diff --git a/web/src/pages/DataManagement/models/index.js b/web/src/pages/DataManagement/models/index.js
index 7ef329bf..50be2d13 100644
--- a/web/src/pages/DataManagement/models/index.js
+++ b/web/src/pages/DataManagement/models/index.js
@@ -1,5 +1,5 @@
import { getIndices,getMappings, getSettings, deleteIndex,
-updateSettings} from '@/services/indices';
+updateSettings,createIndex} from '@/services/indices';
import { message } from 'antd';
export default {
@@ -79,7 +79,17 @@ export default {
clusterIndices: clusterIndices,
}
})
- }
+ },
+ *addIndex({payload}, {call, put, select}){
+ let resp = yield call(createIndex, payload);
+ if(resp.status === false){
+ message.warn("create index failed")
+ return
+ }
+ yield put({
+ type: 'fetchIndices'
+ })
+ },
},
reducers:{
saveData(state, {payload}){
diff --git a/web/src/services/indices.js b/web/src/services/indices.js
index 25b0457a..aa798832 100644
--- a/web/src/services/indices.js
+++ b/web/src/services/indices.js
@@ -40,4 +40,13 @@ export async function deleteIndex(params) {
return request(`${pathPrefix}/index/${index}`, {
method: 'DELETE'
});
+}
+
+
+export async function createIndex(params) {
+ let index = params.index;
+ return request(`${pathPrefix}/index/${index}`, {
+ method: 'POST',
+ body: params.config
+ });
}
\ No newline at end of file