chore: add `Clean unavailable nodes` and `Clean deleted indices` to actions in cluster list (#44)
Co-authored-by: yaojiping <yaojiping@infini.ltd>
This commit is contained in:
parent
4218d42cde
commit
01c0bda677
|
@ -121,6 +121,10 @@ export default {
|
||||||
"form.button.verify": "Verify",
|
"form.button.verify": "Verify",
|
||||||
"form.button.clean": "Clean",
|
"form.button.clean": "Clean",
|
||||||
"form.button.clean.confim.desc": "Are you sure to clean data that is {status}?",
|
"form.button.clean.confim.desc": "Are you sure to clean data that is {status}?",
|
||||||
|
"form.button.clean.unavailable.nodes": "Clean unavailable nodes",
|
||||||
|
"form.button.clean.unavailable.nodes.desc": "Are you sure to clean nodes that are unavailable within seven days?",
|
||||||
|
"form.button.clean.deleted.indices": "Clean deleted indices",
|
||||||
|
"form.button.clean.deleted.indices.desc": "Are you sure to clean indices that are deleted?",
|
||||||
"component.refreshGroup.label.title": "Auto Refresh",
|
"component.refreshGroup.label.title": "Auto Refresh",
|
||||||
"component.refreshGroup.label.every": "Every",
|
"component.refreshGroup.label.every": "Every",
|
||||||
|
|
||||||
|
|
|
@ -126,6 +126,10 @@ export default {
|
||||||
"form.button.verify": "校验",
|
"form.button.verify": "校验",
|
||||||
"form.button.clean": "清除",
|
"form.button.clean": "清除",
|
||||||
"form.button.clean.confim.desc": "确定删除状态为 {status} 的数据吗?",
|
"form.button.clean.confim.desc": "确定删除状态为 {status} 的数据吗?",
|
||||||
|
"form.button.clean.unavailable.nodes": "清除不可用节点",
|
||||||
|
"form.button.clean.unavailable.nodes.desc": "确定清除7天内不可用的节点吗?",
|
||||||
|
"form.button.clean.deleted.indices": "清除已删除索引",
|
||||||
|
"form.button.clean.deleted.indices.desc": "确定清除已删除的索引吗?",
|
||||||
"component.refreshGroup.label.title": "自动刷新",
|
"component.refreshGroup.label.title": "自动刷新",
|
||||||
"component.refreshGroup.label.every": "每隔",
|
"component.refreshGroup.label.every": "每隔",
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ import Infos from "./Detail/Infos";
|
||||||
import Card from "./Card";
|
import Card from "./Card";
|
||||||
import Table from "./Table";
|
import Table from "./Table";
|
||||||
import Overview from "@/components/Overview";
|
import Overview from "@/components/Overview";
|
||||||
import CleanData from "../components/CleanData";
|
|
||||||
|
|
||||||
const facetLabels = {
|
const facetLabels = {
|
||||||
"metadata.cluster_name": "cluster",
|
"metadata.cluster_name": "cluster",
|
||||||
|
@ -75,11 +74,6 @@ export default () => {
|
||||||
getStatus: (item) =>
|
getStatus: (item) =>
|
||||||
item._source?.metadata?.labels.health_status || "unavailable",
|
item._source?.metadata?.labels.health_status || "unavailable",
|
||||||
}}
|
}}
|
||||||
headerConfig={{
|
|
||||||
getExtra: (props) => [
|
|
||||||
<CleanData status="deleted" type="index" onSuccess={props.onCleanSuccess}/>,
|
|
||||||
],
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,7 +5,6 @@ import Card from "./Card";
|
||||||
import Table from "./Table";
|
import Table from "./Table";
|
||||||
import Overview from "@/components/Overview";
|
import Overview from "@/components/Overview";
|
||||||
import Logs from "./Detail/Logs";
|
import Logs from "./Detail/Logs";
|
||||||
import CleanData from "../components/CleanData";
|
|
||||||
|
|
||||||
const facetLabels = {
|
const facetLabels = {
|
||||||
"metadata.cluster_name": "cluster",
|
"metadata.cluster_name": "cluster",
|
||||||
|
@ -85,11 +84,6 @@ export default () => {
|
||||||
getStatus: (item) =>
|
getStatus: (item) =>
|
||||||
item._source?.metadata?.labels?.status || "unavailable",
|
item._source?.metadata?.labels?.status || "unavailable",
|
||||||
}}
|
}}
|
||||||
headerConfig={{
|
|
||||||
getExtra: (props) => [
|
|
||||||
<CleanData status="unavailable" type="node" onSuccess={props.onCleanSuccess}/>,
|
|
||||||
],
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
import { ESPrefix } from "@/services/common";
|
|
||||||
import request from "@/utils/request";
|
|
||||||
import { Button, Popconfirm } from "antd"
|
|
||||||
import { useState } from "react";
|
|
||||||
import { formatMessage } from "umi/locale";
|
|
||||||
|
|
||||||
export default (props) => {
|
|
||||||
|
|
||||||
const { status, type, onSuccess } = props;
|
|
||||||
const [loading, setLoading] = useState(false)
|
|
||||||
|
|
||||||
const onDelete = async () => {
|
|
||||||
setLoading(true)
|
|
||||||
const res = await request(`${ESPrefix}/metadata/${type}`, {
|
|
||||||
method: 'DELETE'
|
|
||||||
})
|
|
||||||
if (res?.acknowledged) {
|
|
||||||
if (onSuccess) onSuccess()
|
|
||||||
}
|
|
||||||
setLoading(false)
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Popconfirm
|
|
||||||
title={formatMessage({id: "form.button.clean.confim.desc"}, { status })}
|
|
||||||
onConfirm={() => onDelete()}
|
|
||||||
>
|
|
||||||
<Button loading={loading} type="danger">{formatMessage({ id: "form.button.clean"})}</Button>
|
|
||||||
</Popconfirm>
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -18,6 +18,7 @@ import Link from "umi/link";
|
||||||
import request from "@/utils/request";
|
import request from "@/utils/request";
|
||||||
import { hasAuthority } from "@/utils/authority";
|
import { hasAuthority } from "@/utils/authority";
|
||||||
import { useGlobal } from "@/layouts/GlobalContext";
|
import { useGlobal } from "@/layouts/GlobalContext";
|
||||||
|
import { ESPrefix } from "@/services/common";
|
||||||
|
|
||||||
export default (props) => {
|
export default (props) => {
|
||||||
const ref = useRef(null);
|
const ref = useRef(null);
|
||||||
|
@ -92,6 +93,32 @@ export default (props) => {
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const onClean = async (type) => {
|
||||||
|
setIsLoading(true)
|
||||||
|
const res = await request(`${ESPrefix}/metadata/${type}`, {
|
||||||
|
method: 'DELETE'
|
||||||
|
})
|
||||||
|
if (res?.acknowledged) {
|
||||||
|
message.success(formatMessage({ id: "app.message.operate.success"}))
|
||||||
|
}
|
||||||
|
setIsLoading(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
const showCleanConfirm = (type) => {
|
||||||
|
let title
|
||||||
|
if (type === 'node') {
|
||||||
|
title = formatMessage({ id: "form.button.clean.unavailable.nodes.desc" })
|
||||||
|
} else if (type === 'index') {
|
||||||
|
title = formatMessage({ id: "form.button.clean.unavailable.indices.desc" })
|
||||||
|
}
|
||||||
|
Modal.confirm({
|
||||||
|
title,
|
||||||
|
onOk() {
|
||||||
|
onClean(type)
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const formatTableData = async (value) => {
|
const formatTableData = async (value) => {
|
||||||
let dataNew = formatESSearchResult(value);
|
let dataNew = formatESSearchResult(value);
|
||||||
//更新扩展数据
|
//更新扩展数据
|
||||||
|
@ -212,6 +239,12 @@ export default (props) => {
|
||||||
render: (text, record) => {
|
render: (text, record) => {
|
||||||
const onMenuClick = ({ key }) => {
|
const onMenuClick = ({ key }) => {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case "clean_nodes":
|
||||||
|
showCleanConfirm('node');
|
||||||
|
break;
|
||||||
|
case "clean_indices":
|
||||||
|
showCleanConfirm('index');
|
||||||
|
break;
|
||||||
case "delete":
|
case "delete":
|
||||||
showDeleteConfirm(record);
|
showDeleteConfirm(record);
|
||||||
break;
|
break;
|
||||||
|
@ -233,6 +266,14 @@ export default (props) => {
|
||||||
</Link>
|
</Link>
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
menuItems.push({
|
||||||
|
key: "clean_nodes",
|
||||||
|
content: formatMessage({ id: "form.button.clean.unavailable.nodes" }),
|
||||||
|
});
|
||||||
|
menuItems.push({
|
||||||
|
key: "clean_indices",
|
||||||
|
content: formatMessage({ id: "form.button.clean.deleted.indices" }),
|
||||||
|
});
|
||||||
if (!record.reserved) {
|
if (!record.reserved) {
|
||||||
menuItems.push({
|
menuItems.push({
|
||||||
key: "delete",
|
key: "delete",
|
||||||
|
|
Loading…
Reference in New Issue