|
|
|
@ -9,6 +9,7 @@ import CheckCircleOutline from "@mui/icons-material/CheckCircleOutline" |
|
|
|
|
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 {IconButton, LinearProgress, TableContainer, Table, TableBody, TableCell, TableHead, TableRow, TablePagination} from "@mui/material" |
|
|
|
|
import ConfirmDialog from "../confirm-dialog"; |
|
|
|
|
|
|
|
|
@ -36,6 +37,7 @@ export interface ProcessInterface { |
|
|
|
|
arguments: Record<string, any>, |
|
|
|
|
exception: ProcessExceptionInterface | null, |
|
|
|
|
progress: ProcessProgressInterface | null, |
|
|
|
|
outputId: string | null, |
|
|
|
|
createdAt: string, |
|
|
|
|
updatedAt: string | null, |
|
|
|
|
startedAt: string | null, |
|
|
|
@ -81,8 +83,8 @@ export default function Processes() { |
|
|
|
|
setCount(Number(response.headers.get('X-Pagination-Count'))) |
|
|
|
|
refreshLock = false |
|
|
|
|
} |
|
|
|
|
let output = async (process: string) => { |
|
|
|
|
let response = await fetch(`http://fmw.sipachev.sv/system-monitoring/processes/${process}/output`, |
|
|
|
|
let output = async (process: ProcessInterface) => { |
|
|
|
|
let response = await fetch(`http://fmw.sipachev.sv/system-monitoring/processes/${process.id}/output`, |
|
|
|
|
{ |
|
|
|
|
method: 'GET', |
|
|
|
|
headers: { |
|
|
|
@ -90,7 +92,12 @@ export default function Processes() { |
|
|
|
|
'X-Pagination-Count': '0', |
|
|
|
|
}, |
|
|
|
|
}); |
|
|
|
|
const processes: ProcessInterface[] = await response.json() |
|
|
|
|
const output: string = await response.text() |
|
|
|
|
let a = document.createElement("a"); |
|
|
|
|
let file = new Blob([output], {type: 'plain/text'}); |
|
|
|
|
a.href = URL.createObjectURL(file); |
|
|
|
|
a.download = `${process.id}.txt`; |
|
|
|
|
a.click(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
@ -195,7 +202,7 @@ export default function Processes() { |
|
|
|
|
{Status.Error === status(process) && <IconButton title={`Error`} aria-label="Error"> |
|
|
|
|
<ErrorOutline/> |
|
|
|
|
</IconButton>} |
|
|
|
|
{Status.Success === status(process) && <IconButton onClick={() => output(process.id)} title={`Success`} aria-label="Success"> |
|
|
|
|
{Status.Success === status(process) && <IconButton title={`Success`} aria-label="Success"> |
|
|
|
|
<CheckCircleOutline/> |
|
|
|
|
</IconButton>} |
|
|
|
|
{Status.Running === status(process) && <IconButton title={`Running`} aria-label="Running"> |
|
|
|
@ -215,6 +222,9 @@ export default function Processes() { |
|
|
|
|
{canKill(process) && <IconButton title={`Kill`} aria-label="Kill"> |
|
|
|
|
<DeleteForeverOutlined/> |
|
|
|
|
</IconButton>} |
|
|
|
|
{process?.outputId && <IconButton title={`Output`} onClick={() => output(process)} aria-label="Output"> |
|
|
|
|
<FactCheckOutlined/> |
|
|
|
|
</IconButton>} |
|
|
|
|
</TableCell> |
|
|
|
|
<TableCell title={new Date(process.createdAt).toLocaleString()}> |
|
|
|
|
{new Date(process.createdAt).toLocaleDateString()} |
|
|
|
|