diff --git a/sysom_web/config/proxy.js b/sysom_web/config/proxy.js
index 51abb491a3d27cc9e43ceeb1ed8607d420f5f2af..46d8c47fc6b37a20e7ff02f4c71334d024be7691 100644
--- a/sysom_web/config/proxy.js
+++ b/sysom_web/config/proxy.js
@@ -8,11 +8,31 @@
*/
export default {
dev: {
+ //'/api/v1/tasks/': {
+ // 要代理的地址
+ //target: 'http://sysom.openanolis.cn',
+ // 配置了这个可以从 http 代理到 https
+ // 依赖 origin 的功能可能需要这个,比如 cookie
+ // changeOrigin: true,
+ // },
+
// localhost:8000/api/** -> https://preview.pro.ant.design/api/**
'/api/v1/': {
// 要代理的地址
//target: 'https://preview.pro.ant.design',
- target: 'http://127.0.0.1:8001',
+// target: 'http://127.0.0.1:8001',
+ target: 'http://sysom.pro',
+ // 配置了这个可以从 http 代理到 https
+ // 依赖 origin 的功能可能需要这个,比如 cookie
+ changeOrigin: true,
+ },
+
+ //http://sysom.openanolis.cn/grafana/d/sysom-dashboard/sysom-dashboard?orgId=1&refresh=1m&var-node=127.0.0.1:9100&kiosk=tv
+ '/grafana/': {
+ // 要代理的地址
+ //target: 'https://preview.pro.ant.design',
+// target: 'http://127.0.0.1:8001',
+ target: 'http://sysom.pro',
// 配置了这个可以从 http 代理到 https
// 依赖 origin 的功能可能需要这个,比如 cookie
changeOrigin: true,
diff --git a/sysom_web/src/pages/diagnose/oscheck/index.jsx b/sysom_web/src/pages/diagnose/oscheck/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..43a896ebf14118585b90c8ecd29970c2204e205e
--- /dev/null
+++ b/sysom_web/src/pages/diagnose/oscheck/index.jsx
@@ -0,0 +1,82 @@
+import { PageContainer } from '@ant-design/pro-layout';
+import { useState, useRef } from 'react';
+import ProCard from '@ant-design/pro-card';
+import OSCheckTaskForm from './osCheckTaskForm';
+import OSCheckTaskResult from './osCheckResult'
+import OSCheckList from './osCheckList';
+import { _getTask } from '../service'
+
+const { Divider } = ProCard;
+
+const NetList = () => {
+
+ const refOSCheckList = useRef();
+ const [osCheckResult, setOsCheckResult] = useState();
+
+ const onPostTask = () => {
+ refOSCheckList.current.reload();
+ }
+
+
+ const onListClick = async (record) => {
+ let map = {
+ CONFIG: "配置检查",
+ HW: "硬件检查",
+ ISSUE: "已知问题检查",
+ LOG: "日志检查",
+ SLI: "SLI检查",
+ CPU: "CPU",
+ MEM: "内存",
+ NET: "网络",
+ IO: "IO",
+ SCHED: "调度",
+ HOTFIX: "热补丁",
+ MISC: "其他",
+ DMESG: "dmesg",
+ CRIT: "Critical",
+ ERR: "Error",
+ WARN: "Warnning",
+ CRASH: "宕机"
+ }
+
+ const msg = await _getTask(record.id);
+
+ const statusLevelList = ["none", "info", "warning", "error", "critical", "fatal"]
+ const statusLevelMap = { none: 0, info: 1, warning: 2, error: 3, critical: 4, fatal: 5 }
+
+ //格式转换, 转换为Antd Table格式
+ delete msg.result.check_success
+ let osCheckResult = []
+ for (let type in msg.result) {
+ let children = []
+ let maxStatusLevel = 0;
+ for (let item in msg.result[type]) {
+ msg.result[type][item].summary = "fefef" + msg.result[type][item].summary
+ children.push({ ...msg.result[type][item], item: map[item], key: type + item })
+ maxStatusLevel = maxStatusLevel < statusLevelMap[msg.result[type][item].level] ?
+ statusLevelMap[msg.result[type][item].level] : maxStatusLevel
+ }
+ osCheckResult.push({
+ children: children, item: map[type], summary: "",
+ level: statusLevelList[maxStatusLevel], key: type
+ })
+ }
+
+ setOsCheckResult(osCheckResult);
+ }
+
+ return (
+
+
+
+
+
+ {
+ osCheckResult ? : <>>
+ }
+
+ );
+};
+
+export default NetList;
diff --git a/sysom_web/src/pages/diagnose/oscheck/osCheckList.jsx b/sysom_web/src/pages/diagnose/oscheck/osCheckList.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..64ad396ad9bc34cae66a311c99b41cacb024a823
--- /dev/null
+++ b/sysom_web/src/pages/diagnose/oscheck/osCheckList.jsx
@@ -0,0 +1,102 @@
+import React, { useRef } from "react";
+import ProTable from "@ant-design/pro-table";
+import { getTaskList } from "../service";
+
+import { Button } from "antd";
+
+function parseJsonString(str) {
+ try {
+ return JSON.parse(str.replace(/\'/g, "\""));
+ }
+ catch (e) {
+ return {}
+ }
+}
+
+const getOsCheckList = async () => {
+ try {
+ let msg = await getTaskList({ service_name: "ossre" });
+ msg.data = msg.data.map((item) => ({ ...item, ...parseJsonString(item.params) }))
+ return {
+ data: msg.data.reverse(),
+ success: true,
+ total: msg.total,
+ };
+ } catch (e) {
+ return { success: false }
+ }
+}
+
+
+const DiagnoTableList = React.forwardRef((props, ref) => {
+
+
+ const columns = [
+ {
+ title: "实例IP",
+ dataIndex: "实例IP",
+ valueType: "textarea"
+ },
+ {
+ title: "创建时间",
+ sortOrder: "descend",
+ dataIndex: "created_at",
+ valueType: "dateTime",
+ },
+ {
+ title: "OSCheckTaskId",
+ dataIndex: "task_id",
+ valueType: "textarea",
+ },
+ {
+ title: '状态',
+ dataIndex: 'status',
+ valueEnum: {
+ Ready: { text: '运行中', status: 'Processing' },
+ Success: { text: '诊断完毕', status: 'Success' },
+ Fail: { text: '异常', status: 'Error' },
+ },
+ },
+ {
+ title: "操作",
+ dataIndex: "option",
+ valueType: "option",
+ render: (_, record) => {
+ if (record.status == "Success") {
+ return (
+ {
+ props?.onClick?.(record)
+ }}>查看诊断结果
+ )
+ }
+ else if (record.status == "Fail") {
+ return (
+ {
+ props?.onError?.(record)
+ }}>查看出错信息
+ )
+ }
+ else {
+ return (暂无可用操作);
+ }
+ },
+ }
+ ];
+
+// pagination={{ pageSize: 5 }}
+ return (
+
+ );
+});
+
+export default DiagnoTableList;
diff --git a/sysom_web/src/pages/diagnose/oscheck/osCheckResult.jsx b/sysom_web/src/pages/diagnose/oscheck/osCheckResult.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..f957e65dd493bc900f3fe9e0a699c0078b1edb6d
--- /dev/null
+++ b/sysom_web/src/pages/diagnose/oscheck/osCheckResult.jsx
@@ -0,0 +1,67 @@
+import React from "react";
+import ProTable from "@ant-design/pro-table";
+
+
+const DiagnoTableList = React.forwardRef((props, ref) => {
+
+ const columns = [
+ {
+ title: "检查项目",
+ dataIndex: "item",
+ valueType: "textarea",
+ width: 200,
+ },
+ {
+ title: '状态',
+ dataIndex: 'level',
+ width: 100,
+ valueEnum: {
+ none: { text: '正常', status: 'Success' },
+ info: { text: '提示', status: 'Warning' },
+ warning: { text: '告警', status: 'Warning' },
+ error: { text: '一般错误', status: 'Error' },
+ critical: { text: '严重错误', status: 'Error' },
+ fatal: { text: '致命错误', status: 'Error' },
+ },
+ },
+ {
+ title: "检查结果",
+ dataIndex: "summary",
+ valueType: "textarea",
+ ellipsis: true,
+ },
+ {
+ title: "操作",
+ dataIndex: "option",
+ valueType: "option",
+ width: 200,
+ render: (_, record) => {
+ if (record.level != "none") {
+ return (
+ {
+ props?.onRepair?.(record)
+ }}>自动修复
+ )
+ }
+ else {
+ return ();
+ }
+ },
+ }
+ ];
+
+ // defaultExpandAllRows={true}
+ return (
+
+ );
+});
+
+export default DiagnoTableList;
diff --git a/sysom_web/src/pages/diagnose/oscheck/osCheckTaskForm.jsx b/sysom_web/src/pages/diagnose/oscheck/osCheckTaskForm.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..bb0dc0ac57ddbe19530c3753c880caf66df2c0e1
--- /dev/null
+++ b/sysom_web/src/pages/diagnose/oscheck/osCheckTaskForm.jsx
@@ -0,0 +1,54 @@
+import ProForm, { ProFormText, } from '@ant-design/pro-form';
+import { Button } from 'antd';
+import { useRequest } from 'umi';
+import ProCard from '@ant-design/pro-card';
+import { postTask } from '../service'
+
+export default (props) => {
+ const { loading, error, run } = useRequest(postTask, {
+ manual: true,
+ onSuccess: (result, params) => {
+ console.log(result);
+ props?.onSuccess?.(result, params);
+ },
+ });
+
+ return (
+
+
+ {
+ run(values)
+ }}
+ submitter={{
+ submitButtonProps: {
+ style: {
+ display: 'none',
+ },
+ },
+ resetButtonProps: {
+ style: {
+ display: 'none',
+ },
+ },
+ }}
+ layout={"horizontal"}
+ autoFocusFirstInput
+ >
+
+
+
+
+
+
+
+ )
+}
\ No newline at end of file