Skip to content

Commit

Permalink
feat: 门户仪表盘删除之前的配置标题和文字,增加平台队列状态展示 (#987)
Browse files Browse the repository at this point in the history
## 之前:仪表盘展示logo和配置的标题和文字

![image](https://github.com/PKUHPC/SCOW/assets/74037789/be387dd7-99a1-4110-8767-a1124f61e6bf)
## 现在:删除展示logo和配置的标题和文字,展示监控状态,饼图没数据则为灰色

![image](https://github.com/PKUHPC/SCOW/assets/74037789/3aafa830-4bff-4358-ae82-098cd1aa8781)
### 宽度低的情况下自动换行

![image](https://github.com/PKUHPC/SCOW/assets/74037789/b0efa707-3889-431e-9ea5-ad76d6a0e8c5)
### 上方表格选择集群(点击表格行选择),下方展示节点、资源和作业信息

![image](https://github.com/PKUHPC/SCOW/assets/74037789/8791a700-2295-4a5e-8e68-4b627828f990)
  • Loading branch information
OYX-1 committed Dec 18, 2023
1 parent 6a0c73a commit ec06733
Show file tree
Hide file tree
Showing 27 changed files with 946 additions and 222 deletions.
10 changes: 10 additions & 0 deletions .changeset/thin-wombats-film.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
"@scow/scheduler-adapter-protos": minor
"@scow/portal-server": minor
"@scow/portal-web": minor
"@scow/config": minor
"@scow/grpc-api": minor
"@scow/docs": minor
---

门户仪表盘删除之前的配置标题和文字,增加平台队列状态展示
5 changes: 3 additions & 2 deletions apps/portal-server/src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { clusters } from "src/config/clusters";
import { config } from "src/config/env";
import { plugins } from "src/plugins";
import { appServiceServer } from "src/services/app";
import { configServiceServer } from "src/services/config";
import { runtimeConfigServiceServer, staticConfigServiceServer } from "src/services/config";
import { desktopServiceServer } from "src/services/desktop";
import { fileServiceServer } from "src/services/file";
import { jobServiceServer } from "src/services/job";
Expand Down Expand Up @@ -47,7 +47,8 @@ export async function createServer() {
await server.register(jobServiceServer);
await server.register(fileServiceServer);
await server.register(shellServiceServer);
await server.register(configServiceServer);
await server.register(staticConfigServiceServer);
await server.register(runtimeConfigServiceServer);

if (process.env.NODE_ENV === "production") {
await checkClustersRootUserLogin(server.logger);
Expand Down
26 changes: 24 additions & 2 deletions apps/portal-server/src/services/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@
import { asyncClientCall } from "@ddadaal/tsgrpc-client";
import { plugin } from "@ddadaal/tsgrpc-server";
import { ConfigServiceServer, ConfigServiceService } from "@scow/protos/build/common/config";
import { getAdapterClient } from "src/utils/clusters";
import { ConfigServiceServer as runTimeConfigServiceServer, ConfigServiceService as runTimeConfigServiceService }
from "@scow/protos/build/portal/config";
import { ApiVersion } from "@scow/utils/build/version";
import { checkSchedulerApiVersion, getAdapterClient } from "src/utils/clusters";
import { clusterNotFound } from "src/utils/errors";

export const configServiceServer = plugin((server) => {
export const staticConfigServiceServer = plugin((server) => {
return server.addService<ConfigServiceServer>(ConfigServiceService, {
getClusterConfig: async ({ request }) => {
const { cluster } = request;
Expand All @@ -28,6 +31,25 @@ export const configServiceServer = plugin((server) => {

return [reply];
},
});
});

export const runtimeConfigServiceServer = plugin((server) => {
return server.addService<runTimeConfigServiceServer>(runTimeConfigServiceService, {
getClusterInfo: async ({ request }) => {
const { cluster } = request;

const client = getAdapterClient(cluster);
if (!client) { throw clusterNotFound(cluster); }

// 当前接口要求的最低调度器接口版本
const minRequiredApiVersion: ApiVersion = { major: 1, minor: 4, patch: 0 };
// 检验调度器的API版本是否符合要求,不符合要求报错
await checkSchedulerApiVersion(client, minRequiredApiVersion);

const reply = await asyncClientCall(client.config, "getClusterInfo", {});

return [reply];
},
});
});
4 changes: 0 additions & 4 deletions apps/portal-web/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -150,15 +150,11 @@ const buildRuntimeConfig = async (phase, basePath) => {
UI_CONFIG: uiConfig,
LOGIN_NODES: parseKeyValue(config.LOGIN_NODES),
SERVER_URL: config.SERVER_URL,
HOME_TEXTS: portalConfig.homeText.hostnameMap,
HOME_TITLES: portalConfig.homeTitle.hostnameMap,
SUBMIT_JOB_WORKING_DIR: portalConfig.submitJobDefaultPwd,
SCOW_API_AUTH_TOKEN: commonConfig.scowApi?.auth?.token,
AUDIT_CONFIG: config.AUDIT_DEPLOYED ? auditConfig : undefined,

SERVER_I18N_CONFIG_TEXTS: {
defaultHomeTitle: portalConfig.homeTitle.defaultText,
defaultHomeText: portalConfig.homeText.defaultText,
submitJopPromptText: portalConfig.submitJobPromptText,
},

Expand Down
2 changes: 2 additions & 0 deletions apps/portal-web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"license": "Mulan PSL v2",
"repository": "https://glithub.com/PKUHPC/SCOW",
"dependencies": {
"@ant-design/colors": "7.0.0",
"@ant-design/cssinjs": "1.17.2",
"@ant-design/icons": "5.2.6",
"@codemirror/language": "6.9.2",
Expand Down Expand Up @@ -63,6 +64,7 @@
"react-dom": "18.2.0",
"react-is": "18.2.0",
"react-typed-i18n": "2.3.0",
"recharts": "2.10.1",
"simstate": "3.0.1",
"styled-components": "6.1.1",
"tslib": "2.6.2",
Expand Down
1 change: 1 addition & 0 deletions apps/portal-web/src/apis/api.mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ export const job: JobInfo = {
export const mockApi: MockApi<typeof api> = {

getClusterInfo: null,
getClusterRunningInfo:null,
listAvailableTransferClusters: null,

checkAppConnectivity: async () => ({
Expand Down
12 changes: 7 additions & 5 deletions apps/portal-web/src/apis/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import type { ListAvailableAppsSchema } from "src/pages/api/app/listAvailableApp
import type { AuthCallbackSchema } from "src/pages/api/auth/callback";
import type { LogoutSchema } from "src/pages/api/auth/logout";
import type { ValidateTokenSchema } from "src/pages/api/auth/validateToken";
import type { GetClusterRunningInfoSchema } from "src/pages/api/dashboard/getClusterInfo";
import type { CreateDesktopSchema } from "src/pages/api/desktop/createDesktop";
import type { KillDesktopSchema } from "src/pages/api/desktop/killDesktop";
import type { LaunchDesktopSchema } from "src/pages/api/desktop/launchDesktop";
Expand Down Expand Up @@ -72,11 +73,13 @@ export const api = {
logout: apiClient.fromTypeboxRoute<typeof LogoutSchema>("DELETE", "/api/auth/logout"),
validateToken: apiClient.fromTypeboxRoute<typeof ValidateTokenSchema>("GET", "/api/auth/validateToken"),
getClusterInfo: apiClient.fromTypeboxRoute<typeof GetClusterInfoSchema>("GET", "/api//cluster"),
getClusterRunningInfo: apiClient.fromTypeboxRoute<typeof GetClusterRunningInfoSchema>("GET", "/api/dashboard/getClusterInfo"),
createDesktop: apiClient.fromTypeboxRoute<typeof CreateDesktopSchema>("POST", "/api/desktop/createDesktop"),
killDesktop: apiClient.fromTypeboxRoute<typeof KillDesktopSchema>("POST", "/api/desktop/killDesktop"),
launchDesktop: apiClient.fromTypeboxRoute<typeof LaunchDesktopSchema>("POST", "/api/desktop/launchDesktop"),
listAvailableWms: apiClient.fromTypeboxRoute<typeof ListAvailableWmsSchema>("GET", "/api/desktop/listAvailableWms"),
listDesktops: apiClient.fromTypeboxRoute<typeof ListDesktopsSchema>("GET", "/api/desktop/listDesktops"),
checkTransferKey: apiClient.fromTypeboxRoute<typeof CheckTransferKeySchema>("POST", "/api/file/checkTransferKey"),
copyFileItem: apiClient.fromTypeboxRoute<typeof CopyFileItemSchema>("PATCH", "/api/file/copy"),
createFile: apiClient.fromTypeboxRoute<typeof CreateFileSchema>("POST", "/api/file/createFile"),
deleteDir: apiClient.fromTypeboxRoute<typeof DeleteDirSchema>("DELETE", "/api/file/deleteDir"),
Expand All @@ -86,8 +89,12 @@ export const api = {
getFileType: apiClient.fromTypeboxRoute<typeof GetFileTypeSchema>("GET", "/api/file/getFileType"),
getHomeDirectory: apiClient.fromTypeboxRoute<typeof GetHomeDirectorySchema>("GET", "/api/file/getHome"),
listFile: apiClient.fromTypeboxRoute<typeof ListFileSchema>("GET", "/api/file/list"),
listAvailableTransferClusters: apiClient.fromTypeboxRoute<typeof ListAvailableTransferClustersSchema>("GET", "/api/file/listAvailableTransferClusters"),
mkdir: apiClient.fromTypeboxRoute<typeof MkdirSchema>("POST", "/api/file/mkdir"),
moveFileItem: apiClient.fromTypeboxRoute<typeof MoveFileItemSchema>("PATCH", "/api/file/move"),
queryFileTransferProgress: apiClient.fromTypeboxRoute<typeof QueryFileTransferProgressSchema>("GET", "/api/file/queryFileTransferProgress"),
startFileTransfer: apiClient.fromTypeboxRoute<typeof StartFileTransferSchema>("POST", "/api/file/startFileTransfer"),
terminateFileTransfer: apiClient.fromTypeboxRoute<typeof TerminateFileTransferSchema>("POST", "/api/file/terminateFileTransfer"),
uploadFile: apiClient.fromTypeboxRoute<typeof UploadFileSchema>("POST", "/api/file/upload"),
cancelJob: apiClient.fromTypeboxRoute<typeof CancelJobSchema>("DELETE", "/api/job/cancelJob"),
deleteJobTemplate: apiClient.fromTypeboxRoute<typeof DeleteJobTemplateSchema>("DELETE", "/api/job/deleteJobTemplate"),
Expand All @@ -101,9 +108,4 @@ export const api = {
submitFileAsJob: apiClient.fromTypeboxRoute<typeof SubmitFileAsJobSchema>("POST", "/api/job/submitFileAsJob"),
changePassword: apiClient.fromTypeboxRoute<typeof ChangePasswordSchema>("PATCH", "/api/profile/changePassword"),
checkPassword: apiClient.fromTypeboxRoute<typeof CheckPasswordSchema>("GET", "/api/profile/checkPassword"),
startFileTransfer: apiClient.fromTypeboxRoute<typeof StartFileTransferSchema>("PATCH", "/api/file/startFileTransfer"),
queryFileTransferProgress: apiClient.fromTypeboxRoute<typeof QueryFileTransferProgressSchema>("GET", "/api/file/queryFileTransferProgress"),
terminateFileTransfer: apiClient.fromTypeboxRoute<typeof TerminateFileTransferSchema>("POST", "/api/file/terminateFileTransfer"),
listAvailableTransferClusters: apiClient.fromTypeboxRoute<typeof ListAvailableTransferClustersSchema>("GET", "/api/file/listAvailableTransferClusters"),
checkTransferKey: apiClient.fromTypeboxRoute<typeof CheckTransferKeySchema>("POST", "/api/file/checkTransferKey"),
};
27 changes: 27 additions & 0 deletions apps/portal-web/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,33 @@ export default {
appCommentTitle: "Explanation",
},
},
dashboard:{
overviewTable:{
title:"platform overview",
clusterName:"clusterName",
partitionName:"partitionName",
nodeCount:"nodeCount",
runningNodeCount:"runningNodeCount",
cpuCoreCount:"cpuCoreCount",
gpuCoreCount:"gpuCoreCount",
usageRatePercentage:"usageRatePercentage",
partitionStatus:"partitionStatus",
available:"available",
notAvailable:"notAvailable",
},
infoPanes:{
nodeInfo:"nodeInfo",
node:"node",
resourceInfo:"resourceInfo",
core:"core",
running:"running",
idle:"idle",
notAvailable:"notAvailable",
card:"card",
job:"job",
pending:"pending",
},
},
},
component: {
errorPages: {
Expand Down
27 changes: 27 additions & 0 deletions apps/portal-web/src/i18n/zh_cn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,33 @@ export default {
appCommentTitle: "说明",
},
},
dashboard:{
overviewTable:{
title:"平台概览",
clusterName:"集群",
partitionName:"分区",
nodeCount:"节点总数",
runningNodeCount:"运行中节点数",
cpuCoreCount:"CPU核心数",
gpuCoreCount:"GPU卡数",
usageRatePercentage:"节点使用率",
partitionStatus:"分区状态",
available:"可用",
notAvailable:"不可用",
},
infoPanes:{
nodeInfo:"节点信息",
node:"节点",
resourceInfo:"资源信息",
core:"核",
running:"运行中",
idle:"空闲",
notAvailable:"不可用",
card:"卡",
job:"作业",
pending:"排队中",
},
},
},
component:{
errorPages:{
Expand Down

This file was deleted.

Loading

0 comments on commit ec06733

Please sign in to comment.