From fbf3c06efd08aa87f6565bb767158f0a35b4fd47 Mon Sep 17 00:00:00 2001 From: Rinsvent Date: Sun, 9 Apr 2023 00:28:41 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D1=83=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B5?= =?UTF-8?q?=D1=81=D1=81=D0=B0=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B0=D0=BF=D1=80=D1=83=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/sm/requests/approve-process.ts | 3 +++ api/sm/responses/processes.ts | 1 + api/sm/schemas/approve-process.ts | 10 ++++++++ api/sm/sm-client.ts | 10 ++++++++ components/elements/processes/index.tsx | 34 +++++++++++++++++++++---- 5 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 api/sm/requests/approve-process.ts create mode 100644 api/sm/schemas/approve-process.ts diff --git a/api/sm/requests/approve-process.ts b/api/sm/requests/approve-process.ts new file mode 100644 index 0000000..bda716b --- /dev/null +++ b/api/sm/requests/approve-process.ts @@ -0,0 +1,3 @@ +export interface ApproveProcessRequest { + id: string +} diff --git a/api/sm/responses/processes.ts b/api/sm/responses/processes.ts index d08565f..d7ad115 100644 --- a/api/sm/responses/processes.ts +++ b/api/sm/responses/processes.ts @@ -37,6 +37,7 @@ export interface ProcessInterface { canRepeat: boolean canStop: boolean canKill: boolean + canApprove: boolean } export enum Status { diff --git a/api/sm/schemas/approve-process.ts b/api/sm/schemas/approve-process.ts new file mode 100644 index 0000000..24c8e32 --- /dev/null +++ b/api/sm/schemas/approve-process.ts @@ -0,0 +1,10 @@ +import {Method, SchemaInterface} from "../../schema-client"; + +class ApproveProcessSchema implements SchemaInterface { + method = Method.POST + url = '/system-monitoring/processes/{id}/approve' + contentType = null +} + +export let approveProcessSchema = new ApproveProcessSchema() +export default approveProcessSchema diff --git a/api/sm/sm-client.ts b/api/sm/sm-client.ts index 77faf8c..4d23373 100644 --- a/api/sm/sm-client.ts +++ b/api/sm/sm-client.ts @@ -8,7 +8,9 @@ import {CommandInterface} from "./responses/comamnds"; import commandsSchema from "./schemas/commands"; import runCommandsSchema from "./schemas/run-commands"; import {RepeatProcessRequest} from "./requests/repeat-process"; +import {ApproveProcessRequest} from "./requests/approve-process"; import repeatProcessSchema from "./schemas/repeat-process"; +import approveProcessSchema from "./schemas/approve-process"; import processOutputSchema from "./schemas/process-output"; import {ProcessOutputRequest} from "./requests/process-ouput"; import playProcessSchema from "./schemas/play-process"; @@ -52,6 +54,14 @@ export class SMClient extends SchemaClient { } } + async approveProcess(data: ApproveProcessRequest): Promise { + let { responseData, headers } = await this.send(approveProcessSchema, data) + return { + data: responseData as ProcessInterface[], + headers: headers + } + } + async repeatProcess(data: RepeatProcessRequest): Promise { let { responseData, headers } = await this.send(repeatProcessSchema, data) return { diff --git a/components/elements/processes/index.tsx b/components/elements/processes/index.tsx index cce0eb0..a73999c 100644 --- a/components/elements/processes/index.tsx +++ b/components/elements/processes/index.tsx @@ -1,5 +1,5 @@ import styles from './styles.module.css' -import {useEffect, useState} from "react" +import {useContext, useEffect, useState} from "react" import DeleteForeverOutlined from "@mui/icons-material/DeleteForeverOutlined" import StopCircleOutlined from "@mui/icons-material/StopCircleOutlined" import PauseCircleOutline from "@mui/icons-material/PauseCircleOutline" @@ -10,6 +10,7 @@ import ErrorOutline from "@mui/icons-material/ErrorOutline" import ReplayOutlined from "@mui/icons-material/ReplayOutlined" import RunCircleOutlined from "@mui/icons-material/RunCircleOutlined" import FactCheckOutlined from "@mui/icons-material/FactCheckOutlined" +import ThumbUpAltOutlined from '@mui/icons-material/ThumbUpAltOutlined' import { Box, TextField, @@ -30,6 +31,7 @@ import Command from "../commands/elements/command"; import {CommandInterface} from "../../../api/sm/responses/comamnds"; import Grid from '@mui/material/Grid'; import {useApi} from "../../../hooks/use-api"; +import Context from "../../../context/token"; enum Action { Run, @@ -38,9 +40,11 @@ enum Action { Kill, Play, Pause, + Approve, } export default function Processes() { + const {token} = useContext(Context) const [processes, setProcesses] = useState([]); const [commands, setCommands] = useState([]); const [page, setPage] = useState(0); @@ -116,6 +120,8 @@ export default function Processes() { }, [action]); let isFinished = (process: ProcessInterface) => process.cancelledAt || process.completedAt + let isCancelled = (process: ProcessInterface) => process.cancelledAt + let isRunning = (process: ProcessInterface) => process.startedAt && !isFinished(process) const handleChangePage = (event: any, page: number) => { setPage(page); @@ -145,6 +151,12 @@ export default function Processes() { }) } + if (action === Action.Approve) { + await api.approveProcess({ + id: selectedProcess.id, + }) + } + if (action === Action.Repeat) { await api.repeatProcess({ id: selectedProcess.id, @@ -213,12 +225,14 @@ export default function Processes() { {process.name} - {!process.progress && !isFinished(process) && } - {!process.progress && isFinished(process) && } + {!process.progress && !isFinished(process) && isRunning(process) && } + {!process.progress && !isFinished(process) && !isRunning(process) && } + {!process.progress && isFinished(process) && !isCancelled(process) && } + {!process.progress && isFinished(process) && isCancelled(process) && } {process.progress && } {process.progress && - {`${process.progress.progress}`} / {`${process.progress.total}`} - {process.progress.percent}% [{process.progress.memory}] / {process.progress.remaining} - } + {`${process.progress.progress}`} / {`${process.progress.total}`} - {process.progress.percent}% [{process.progress.memory}] / {process.progress.remaining} + } {process.canPlay && openDialog(process, Action.Play)} title={`Play`} aria-label="Play"> } @@ -247,6 +261,9 @@ export default function Processes() { } + {process.canApprove && token?.permissions.indexOf('approve_process') > -1 && openDialog(process, Action.Approve)} title={`Approve`} aria-label="Approve"> + + } {process.canRepeat && openDialog(process, Action.Repeat)} title={`Repeat`} aria-label="Repeat"> } @@ -300,6 +317,13 @@ export default function Processes() { argumentsParams={selectedProcess.arguments} callback={callback}/>} } + {selectedProcess && {setAction(null)}}> + Approve? + } {selectedProcess && -1) }