| @@ -4,6 +4,27 @@ export enum CommonTabKeys { | |||||
| Public = 'Public', // 公开 | Public = 'Public', // 公开 | ||||
| } | } | ||||
| // 实验状态 | |||||
| export enum ExperimentStatus { | |||||
| Running = 'Running', // 运行中 | |||||
| Succeeded = 'Succeeded', // 成功 | |||||
| Pending = 'Pending', // 启动中 | |||||
| Failed = 'Failed', // 失败 | |||||
| Error = 'Error', // 错误 | |||||
| Terminated = 'Terminated', // 终止 | |||||
| Skipped = 'Skipped', // 跳过 | |||||
| Omitted = 'Omitted', // 忽略 | |||||
| } | |||||
| // TensorBoard 状态 | |||||
| export enum TensorBoardStatus { | |||||
| Unknown = 'Unknown', // 未知 | |||||
| Pending = 'Pending', // 启动中 | |||||
| Running = 'Running', // 运行中 | |||||
| Terminated = 'Terminated', // 未启动或者已终止 | |||||
| Failed = 'Failed', // 失败 | |||||
| } | |||||
| // 镜像版本状态 | // 镜像版本状态 | ||||
| export enum MirrorVersionStatus { | export enum MirrorVersionStatus { | ||||
| Available = 'available', // 可用 | Available = 'available', // 可用 | ||||
| @@ -8,10 +8,11 @@ import { ResourceData, ResourceType, resourceConfig } from '../../config'; | |||||
| import ResourceVersion from '../ResourceVersion'; | import ResourceVersion from '../ResourceVersion'; | ||||
| import styles from './index.less'; | import styles from './index.less'; | ||||
| // 这里值小写是因为值会写在 url 中 | |||||
| export enum ResourceInfoTabKeys { | export enum ResourceInfoTabKeys { | ||||
| Introduction = 'introduction', | |||||
| Version = 'version', | |||||
| Evolution = 'evolution', | |||||
| Introduction = 'introduction', // 简介 | |||||
| Version = 'version', // 版本 | |||||
| Evolution = 'evolution', // 演化 | |||||
| } | } | ||||
| type ResourceIntroProps = { | type ResourceIntroProps = { | ||||
| @@ -9,8 +9,8 @@ import { useEffect, useState } from 'react'; | |||||
| import styles from './index.less'; | import styles from './index.less'; | ||||
| export enum ComparisonType { | export enum ComparisonType { | ||||
| Train = 'train', // 训练 | |||||
| Evaluate = 'evaluate', // 评估 | |||||
| Train = 'Train', // 训练 | |||||
| Evaluate = 'Evaluate', // 评估 | |||||
| } | } | ||||
| function ExperimentComparison() { | function ExperimentComparison() { | ||||
| @@ -4,8 +4,8 @@ | |||||
| * @Description: 日志组件 | * @Description: 日志组件 | ||||
| */ | */ | ||||
| import { ExperimentStatus } from '@/enums'; | |||||
| import { useStateRef } from '@/hooks'; | import { useStateRef } from '@/hooks'; | ||||
| import { ExperimentStatus } from '@/pages/Experiment/status'; | |||||
| import { ExperimentLog } from '@/pages/Experiment/training/props'; | import { ExperimentLog } from '@/pages/Experiment/training/props'; | ||||
| import { getExperimentPodsLog } from '@/services/experiment/index.js'; | import { getExperimentPodsLog } from '@/services/experiment/index.js'; | ||||
| import { DoubleRightOutlined, DownOutlined, UpOutlined } from '@ant-design/icons'; | import { DoubleRightOutlined, DownOutlined, UpOutlined } from '@ant-design/icons'; | ||||
| @@ -1,4 +1,4 @@ | |||||
| import { ExperimentStatus } from '@/pages/Experiment/status'; | |||||
| import { ExperimentStatus } from '@/enums'; | |||||
| import { ExperimentLog } from '@/pages/Experiment/training/props'; | import { ExperimentLog } from '@/pages/Experiment/training/props'; | ||||
| import LogGroup from '../LogGroup'; | import LogGroup from '../LogGroup'; | ||||
| import styles from './index.less'; | import styles from './index.less'; | ||||
| @@ -5,16 +5,15 @@ import classNames from 'classnames'; | |||||
| import styles from './index.less'; | import styles from './index.less'; | ||||
| // import stopImg from '@/assets/img/tensor-board-stop.png'; | // import stopImg from '@/assets/img/tensor-board-stop.png'; | ||||
| import terminatedImg from '@/assets/img/tensor-board-terminated.png'; | import terminatedImg from '@/assets/img/tensor-board-terminated.png'; | ||||
| import { TensorBoardStatus } from '@/enums'; | |||||
| export enum TensorBoardStatusEnum { | |||||
| Unknown = 'Unknown', // 未知 | |||||
| Pending = 'Pending', // 启动中 | |||||
| Running = 'Running', // 运行中 | |||||
| Terminated = 'Terminated', // 未启动或者已终止 | |||||
| Failed = 'Failed', // 失败 | |||||
| } | |||||
| type TensorBoardStatusInfo = { | |||||
| label: string; | |||||
| icon: string; | |||||
| classname: string; | |||||
| }; | |||||
| const statusConfig = { | |||||
| const statusConfig: Record<TensorBoardStatus, TensorBoardStatusInfo> = { | |||||
| Unknown: { | Unknown: { | ||||
| label: '未知', | label: '未知', | ||||
| icon: terminatedImg, | icon: terminatedImg, | ||||
| @@ -43,12 +42,12 @@ const statusConfig = { | |||||
| }; | }; | ||||
| type TensorBoardStatusProps = { | type TensorBoardStatusProps = { | ||||
| status: TensorBoardStatusEnum; | |||||
| status: TensorBoardStatus; | |||||
| onClick: () => void; | onClick: () => void; | ||||
| }; | }; | ||||
| function TensorBoardStatus({ | |||||
| status = TensorBoardStatusEnum.Unknown, | |||||
| function TensorBoardStatusCell({ | |||||
| status = TensorBoardStatus.Unknown, | |||||
| onClick, | onClick, | ||||
| }: TensorBoardStatusProps) { | }: TensorBoardStatusProps) { | ||||
| return ( | return ( | ||||
| @@ -64,7 +63,7 @@ function TensorBoardStatus({ | |||||
| {statusConfig[status].icon ? ( | {statusConfig[status].icon ? ( | ||||
| <> | <> | ||||
| <div style={{ margin: '0 6px' }}>|</div> | <div style={{ margin: '0 6px' }}>|</div> | ||||
| {status === TensorBoardStatusEnum.Pending ? ( | |||||
| {status === TensorBoardStatus.Pending ? ( | |||||
| <LoadingOutlined className={styles['tensorBoard-status__icon']} /> | <LoadingOutlined className={styles['tensorBoard-status__icon']} /> | ||||
| ) : ( | ) : ( | ||||
| <img | <img | ||||
| @@ -79,4 +78,4 @@ function TensorBoardStatus({ | |||||
| ); | ); | ||||
| } | } | ||||
| export default TensorBoardStatus; | |||||
| export default TensorBoardStatusCell; | |||||
| @@ -1,5 +1,6 @@ | |||||
| import CommonTableCell from '@/components/CommonTableCell'; | import CommonTableCell from '@/components/CommonTableCell'; | ||||
| import KFIcon from '@/components/KFIcon'; | import KFIcon from '@/components/KFIcon'; | ||||
| import { TensorBoardStatus } from '@/enums'; | |||||
| import { | import { | ||||
| deleteExperimentById, | deleteExperimentById, | ||||
| deleteQueryByExperimentInsId, | deleteQueryByExperimentInsId, | ||||
| @@ -24,7 +25,7 @@ import { useEffect, useRef, useState } from 'react'; | |||||
| import { useNavigate } from 'react-router-dom'; | import { useNavigate } from 'react-router-dom'; | ||||
| import { ComparisonType } from './Comparison'; | import { ComparisonType } from './Comparison'; | ||||
| import AddExperimentModal from './components/AddExperimentModal'; | import AddExperimentModal from './components/AddExperimentModal'; | ||||
| import TensorBoardStatus, { TensorBoardStatusEnum } from './components/TensorBoardStatus'; | |||||
| import TensorBoardStatusCell from './components/TensorBoardStatus'; | |||||
| import Styles from './index.less'; | import Styles from './index.less'; | ||||
| import { experimentStatusInfo } from './status'; | import { experimentStatusInfo } from './status'; | ||||
| @@ -260,12 +261,12 @@ function Experiment() { | |||||
| const handleTensorboard = async (experimentIn) => { | const handleTensorboard = async (experimentIn) => { | ||||
| if ( | if ( | ||||
| experimentIn.tensorBoardStatus === TensorBoardStatusEnum.Terminated || | |||||
| experimentIn.tensorBoardStatus === TensorBoardStatusEnum.Failed | |||||
| experimentIn.tensorBoardStatus === TensorBoardStatus.Terminated || | |||||
| experimentIn.tensorBoardStatus === TensorBoardStatus.Failed | |||||
| ) { | ) { | ||||
| await runTensorBoard(experimentIn); | await runTensorBoard(experimentIn); | ||||
| } else if ( | } else if ( | ||||
| experimentIn.tensorBoardStatus === TensorBoardStatusEnum.Running && | |||||
| experimentIn.tensorBoardStatus === TensorBoardStatus.Running && | |||||
| experimentIn.tensorboardUrl | experimentIn.tensorboardUrl | ||||
| ) { | ) { | ||||
| window.open(experimentIn.tensorboardUrl, '_blank'); | window.open(experimentIn.tensorboardUrl, '_blank'); | ||||
| @@ -457,12 +458,12 @@ function Experiment() { | |||||
| </a> | </a> | ||||
| <div className={Styles.tensorBoard}> | <div className={Styles.tensorBoard}> | ||||
| {item.nodes_result?.tensorboard_log ? ( | {item.nodes_result?.tensorboard_log ? ( | ||||
| <TensorBoardStatus | |||||
| <TensorBoardStatusCell | |||||
| status={item.tensorBoardStatus} | status={item.tensorBoardStatus} | ||||
| onClick={() => handleTensorboard(item)} | onClick={() => handleTensorboard(item)} | ||||
| ></TensorBoardStatus> | |||||
| ></TensorBoardStatusCell> | |||||
| ) : ( | ) : ( | ||||
| '-' | |||||
| '--' | |||||
| )} | )} | ||||
| </div> | </div> | ||||
| <div className={Styles.description}> | <div className={Styles.description}> | ||||
| @@ -1,23 +1,13 @@ | |||||
| import { ExperimentStatus } from '@/enums'; | |||||
| import themes from '@/styles/theme.less'; | import themes from '@/styles/theme.less'; | ||||
| export interface StatusInfo { | |||||
| export interface ExperimentStatusInfo { | |||||
| label: string; | label: string; | ||||
| color: string; | color: string; | ||||
| icon: string; | icon: string; | ||||
| } | } | ||||
| export enum ExperimentStatus { | |||||
| Running = 'Running', | |||||
| Succeeded = 'Succeeded', | |||||
| Pending = 'Pending', | |||||
| Failed = 'Failed', | |||||
| Error = 'Error', | |||||
| Terminated = 'Terminated', | |||||
| Skipped = 'Skipped', | |||||
| Omitted = 'Omitted', | |||||
| } | |||||
| export const experimentStatusInfo: Record<ExperimentStatus, StatusInfo | undefined> = { | |||||
| export const experimentStatusInfo: Record<ExperimentStatus, ExperimentStatusInfo> = { | |||||
| Running: { | Running: { | ||||
| label: '运行中', | label: '运行中', | ||||
| color: themes.primaryColor, | color: themes.primaryColor, | ||||
| @@ -17,9 +17,9 @@ import { ModelDeploymentData } from '../types'; | |||||
| import styles from './index.less'; | import styles from './index.less'; | ||||
| export enum ModelDeploymentTabKey { | export enum ModelDeploymentTabKey { | ||||
| Predict = 'Predict', | |||||
| Guide = 'Guide', | |||||
| Log = 'Log', | |||||
| Predict = 'Predict', // 预测 | |||||
| Guide = 'Guide', // 调用指南 | |||||
| Log = 'Log', // 服务日志 | |||||
| } | } | ||||
| function ModelDeploymentInfo() { | function ModelDeploymentInfo() { | ||||
| @@ -26,7 +26,7 @@ export type ModelDeploymentData = { | |||||
| // 操作类型 | // 操作类型 | ||||
| export enum ModelDeploymentOperationType { | export enum ModelDeploymentOperationType { | ||||
| Create = 'Create', | |||||
| Update = 'Update', | |||||
| Restart = 'Restart', | |||||
| Create = 'Create', // 创建 | |||||
| Update = 'Update', // 更新 | |||||
| Restart = 'Restart', // 重启 | |||||
| } | } | ||||
| @@ -4,7 +4,7 @@ | |||||
| * @Description: 定义全局类型,比如无关联的页面都需要要的类型 | * @Description: 定义全局类型,比如无关联的页面都需要要的类型 | ||||
| */ | */ | ||||
| import { ExperimentStatus } from '@/pages/Experiment/status'; | |||||
| import { ExperimentStatus } from '@/enums'; | |||||
| // 流水线全局参数 | // 流水线全局参数 | ||||
| export type PipelineGlobalParam = { | export type PipelineGlobalParam = { | ||||