diff --git a/sysom_web/config/routes.js b/sysom_web/config/routes.js index 4ef6eecdae756fe67cd26befbca82de87bbc121a..ba710cc5c86e4f4860b4430adb7f5dcdc2fef359 100644 --- a/sysom_web/config/routes.js +++ b/sysom_web/config/routes.js @@ -233,6 +233,11 @@ export default [ layout: false, component: "./diagnose/detail" }, + { + path: '/diagnose/query', + name: 'result', + component: './diagnose/result' + }, ], }, { diff --git a/sysom_web/src/locales/en-US/menu.js b/sysom_web/src/locales/en-US/menu.js index c4ca9d1943485b9183e78a9da656b2452937105e..c0936d53f1290614ab5ee6cc26c514089f0cea72 100644 --- a/sysom_web/src/locales/en-US/menu.js +++ b/sysom_web/src/locales/en-US/menu.js @@ -143,6 +143,7 @@ export default { 'menu.diagnose.custom.pannel': 'Task Panel Generation', 'menu.diagnose.custom': 'Custom Diagnostic Center', 'menu.diagnose.custom.command': 'Command Diagnostics', + 'menu.diagnose.result': 'Diagnosis Query', 'menu.journal': 'Log Center', 'menu.journal.audit': 'Audit Log', 'menu.journal.task': 'Mission Log', diff --git a/sysom_web/src/locales/en-US/pages.js b/sysom_web/src/locales/en-US/pages.js index 2d20952920d19aea51f3bfd756cf83995da1db0e..32f5b9faab7aa57291fce0338013f17110e68ffb 100644 --- a/sysom_web/src/locales/en-US/pages.js +++ b/sysom_web/src/locales/en-US/pages.js @@ -403,6 +403,7 @@ export default { 'pages.diagnose.startdiagnosis': 'Start diagnosis', 'pages.diagnose.creationtime': 'Creation time', 'pages.diagnose.diagnosisID': 'Diagnosis ID', + 'pages.diagnose.diagnosisType': 'Diagnosis Type', 'pages.diagnose.diagnosisParams': 'Diagnosis parameters', 'pages.diagnose.diagnosisCommand': 'Diagnosis command', 'pages.diagnose.state': 'State', diff --git a/sysom_web/src/locales/zh-CN/menu.js b/sysom_web/src/locales/zh-CN/menu.js index 073e7ff703e813adf337d304031184fae6449599..2f82b87d871864858f0e86369f8af8c0a06cb5cd 100644 --- a/sysom_web/src/locales/zh-CN/menu.js +++ b/sysom_web/src/locales/zh-CN/menu.js @@ -93,6 +93,7 @@ export default { 'menu.diagnose.custom.pannel': '诊断面板配置生成', 'menu.diagnose.custom': '自定义诊断中心', 'menu.diagnose.custom.command': '命令诊断', + 'menu.diagnose.result': '诊断查询', 'menu.journal': '日志中心', 'menu.journal.audit': '审计日志', 'menu.journal.task': '任务日志', diff --git a/sysom_web/src/locales/zh-CN/pages.js b/sysom_web/src/locales/zh-CN/pages.js index 38798e7ae16fe25ea31fb5e195cf11429b060850..0edb489b58139a6bd9a1d33197b861d9957cb715 100644 --- a/sysom_web/src/locales/zh-CN/pages.js +++ b/sysom_web/src/locales/zh-CN/pages.js @@ -440,6 +440,7 @@ export default { 'pages.diagnose.startdiagnosis': '开始诊断', 'pages.diagnose.creationtime': '创建时间', 'pages.diagnose.diagnosisID': '诊断ID', + 'pages.diagnose.diagnosisType': '诊断类型', 'pages.diagnose.diagnosisParams': '诊断参数', 'pages.diagnose.diagnosisCommand': '诊断命令', 'pages.diagnose.state': '状态', diff --git a/sysom_web/src/pages/diagnose/components/TaskList.jsx b/sysom_web/src/pages/diagnose/components/TaskList.jsx index 72230576f65869845af2bfa1d4737c11dad9a4a6..07488c0719aaed6aed99bd18a163a4f38c89c8a6 100644 --- a/sysom_web/src/pages/diagnose/components/TaskList.jsx +++ b/sysom_web/src/pages/diagnose/components/TaskList.jsx @@ -143,13 +143,20 @@ const TaskList = React.forwardRef((props, ref) => { // rowSelection={{ // defaultSelectedRowKeys: [], // }} - params={{ service_name: props.serviceName, channel: props.channel }} + params={{ service_name: props.serviceName, channel: props.channel, ...props.params }} request={async (params, sort, filter) => { if (Object.keys(sort).length != 0) { const sort_key = Object.keys(sort)[0]; const _sort = sort[sort_key] === "ascend" ? sort_key : `-${sort_key}` params['ordering'] = _sort } + + if (!_.isEmpty(params.params)) { + const newQueryParams = params.params.filter((item) => { + return !_.isEmpty(item) && !_.isEmpty(item.value) + }) + params['params'] = JSON.stringify(newQueryParams) + } const result = await getTaskList(params); const tabMaps = {}; result.data.forEach(item => { diff --git a/sysom_web/src/pages/diagnose/result/components/ResultForm.jsx b/sysom_web/src/pages/diagnose/result/components/ResultForm.jsx new file mode 100644 index 0000000000000000000000000000000000000000..9651f42b4e3afe4e189b609eb21cd5cb3181520b --- /dev/null +++ b/sysom_web/src/pages/diagnose/result/components/ResultForm.jsx @@ -0,0 +1,93 @@ +/* + * @Author: wb-msm241621 + * @Date: 2024-03-05 18:04:46 + * @LastEditTime: 2024-03-08 13:59:46 + * @Description: + */ +import { useRef } from 'react'; +import ProCard from '@ant-design/pro-card'; +import { useIntl, FormattedMessage } from 'umi'; +import ProForm, { + ProFormText, + ProFormSelect, + ProFormList, + ProFormGroup +} from '@ant-design/pro-form'; + + +export default (props) => { + const int1 = useIntl(); + const resultFormRef = useRef(); + const { task_id, channel, params } = props?.params; + return ( + + { props?.onDone?.(v) }} + submitter={{ + onReset: () => { + resultFormRef.current.resetFields() + props?.onReset() + } + }} + > + + + + + , + icon: true, + type: "link", + style: { width: 'unset' }, + }} + label={int1.formatMessage({ + id: "pages.diagnose.diagnosisParams", + defaultMessage: "Diagnose Params" + })} + copyIconProps={false} + initialValue={params} + itemRender={({ listDom, action }) => { + return ( +
+ {listDom} + {action} +
+ ) + } + } + > + + + : + + +
+
+
+ ) +} diff --git a/sysom_web/src/pages/diagnose/result/index.jsx b/sysom_web/src/pages/diagnose/result/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..dcd1b948ab97776d561af7b1dc7395fa4553e0ab --- /dev/null +++ b/sysom_web/src/pages/diagnose/result/index.jsx @@ -0,0 +1,145 @@ +/* + * @Author: wb-msm241621 + * @Date: 2024-03-05 17:12:08 + * @LastEditTime: 2024-03-08 11:37:51 + * @Description: + */ +import { PageContainer } from '@ant-design/pro-layout'; +import _ from 'lodash'; +import { request } from 'umi'; +import { Divider, Modal } from 'antd'; +import ResultForm from './components/ResultForm'; +import TaskList from '../components/TaskList'; +import Dashboard from '../components/Dashboard'; +import { useEffect, useState, useRef } from 'react'; +import { getTask } from '../service'; + + +/** + * @Description: 为元组插入元素到指定索引 + * @param {*} tuple 指定元组 + * @param {*} index 指定索引 + * @param {*} value 需要插入的元素 + * @return {*} newTuple 插入新元素后的元组 + */ +function insertIntoTuple(tuple, index, value) { + if (index >= 0 && index <= tuple.length) { + let newTuple = tuple.slice(); + newTuple.splice(index, 0, value); + return newTuple; + } else { + throw new Error("Error: index exceeds array range"); + } +} + + +const DiagnoseResult = () => { + const resultListRef = useRef([]); + const [multichannelConfig, setMultichannelConfig] = useState([ + { + "name": "ssh", + "label": "SSH通道", + "extra_params": { + "*": [] + } + } + ]); + const initialierQueryParams = { + task_id: "", + channel: "", + params: [{ "key": "instance", "value": "" }] + } + const [data, setData] = useState(); + const [params, setParams] = useState(initialierQueryParams); + const [diagnoseMenus, setDiagnoseMenus] = useState([]); + const [pannelConfig, setPannelConfig] = useState(); + const chanelEnum = new Object({ ssh: { text: "SSH通道" } }) + + useEffect(() => { + request("/resource/diagnose/v2/multichannel.json") + .catch(err => { + return new Promise.resolve({ + "version": 1.0, + "channels": [ + { + "name": "ssh", + "label": "SSH通道", + "extra_params": { + "*": [] + } + } + ] + }) + }) + .then(res => { + setMultichannelConfig(res["channels"]) + return request("/resource/diagnose/v2/locales.json") + }) + .then(res => { + const { menus } = res; + const diagnosePaths = menus.map(item => { + const s = _.replace(item, "menu.", "") + const new_s = insertIntoTuple((_.split(s, ".")), 1, "v2") + return `/resource/${_.join(new_s, "/")}.json` + }) + setDiagnoseMenus(diagnosePaths); + }) + }, []) + + multichannelConfig.map((value) => { + chanelEnum[value.name] = { text: value.label } + }) + + const onError = async (record) => { + // window.open(`/diagnose/detail/${record.task_id}`) + const msg = await getTask(record.task_id); + Modal.error({ + title: '诊断失败', + content: ( +
+
错误信息: {msg?.err_msg ? msg.err_msg : msg?.result}
+
+ ), + }); + } + + const refreshTask = async (record) => { + const msg = await getTask(record.task_id); + const index = _.findLastIndex(diagnoseMenus, (item) => { return item.includes(msg.service_name); }); + request(diagnoseMenus[index]) + .then(res => { + setPannelConfig(res); + setData({ ...msg, ...msg.result }); + }) + } + + return ( + + + {/* 查询参数搜索表单 */} + { setParams(v); resultListRef.current.reload(); }} + onReset={() => { setParams(initialierQueryParams); resultListRef.current.reload(); }} + /> + + {/* 查询列表 */} + + + {/* 诊断成功结果展示 */} + { + data && + + } + + ) +} + +export default DiagnoseResult;