Skip to content

Commit

Permalink
console: restart message up
Browse files Browse the repository at this point in the history
  • Loading branch information
brig committed Jan 12, 2024
1 parent 381424a commit 0c8fd26
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 18 deletions.
6 changes: 6 additions & 0 deletions console2/src/api/process/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,12 @@ export const get = (
return fetchJson(`/api/v2/process/${instanceId}?${params.toString()}`);
};

export const getRoot = (
instanceId: ConcordId
): Promise<ProcessEntry> => {
return fetchJson(`/api/v1/process/${instanceId}/root`);
};

export const disable = (instanceId: ConcordId, disabled: boolean): Promise<{}> =>
managedFetch(`/api/v1/process/${instanceId}/disable/${disabled}`, { method: 'POST' });

Expand Down
9 changes: 5 additions & 4 deletions console2/src/components/organisms/ProcessActivity/Toolbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,12 @@ interface ExternalProps {
loading: boolean;
instanceId: ConcordId;
process?: ProcessEntry;
rootInstanceId?: ConcordId;
refresh: () => void;
}

const ProcessToolbar = memo((props: ExternalProps) => {
const { stickyRef, loading, refresh, process, instanceId } = props;
const { stickyRef, loading, refresh, process, instanceId, rootInstanceId } = props;

const [isFixed, setFixed] = useState(false);

Expand Down Expand Up @@ -87,7 +88,7 @@ const ProcessToolbar = memo((props: ExternalProps) => {

<MenuItem>{renderStartAt(process)}</MenuItem>

<MenuItem position={'right'}>{renderProcessMainActions(refresh, process)}</MenuItem>
<MenuItem position={'right'}>{renderProcessMainActions(refresh, process, rootInstanceId)}</MenuItem>

<MenuItem>{renderProcessSecondaryActions(refresh, process)}</MenuItem>
</Menu>
Expand Down Expand Up @@ -179,7 +180,7 @@ const renderStartAt = (process?: ProcessEntry) => {
return;
};

const renderProcessMainActions = (refresh: () => void, process?: ProcessEntry) => {
const renderProcessMainActions = (refresh: () => void, process?: ProcessEntry, rootInstanceId?: ConcordId) => {
if (!process) {
return (
<Button.Group>
Expand Down Expand Up @@ -235,7 +236,7 @@ const renderProcessMainActions = (refresh: () => void, process?: ProcessEntry) =
{canBeRestarted(process.status) && process.runtime === 'concord-v2' &&
<RestartProcessPopup
instanceId={process.instanceId}
parentInstanceId={process.parentInstanceId}
rootInstanceId={rootInstanceId}
refresh={refresh}
trigger={renderRestartProcessTrigger}
/>
Expand Down
15 changes: 13 additions & 2 deletions console2/src/components/organisms/ProcessActivity/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@
*/

import * as React from 'react';
import { useCallback, useRef, useState } from 'react';
import { useCallback, useRef, useState, useEffect } from 'react';

import { Link, Redirect, Route, Switch } from 'react-router-dom';
import { Icon, Menu } from 'semantic-ui-react';

import { ConcordId } from '../../../api/common';
import { get as apiGet, isFinal, ProcessEntry } from '../../../api/process';
import { get as apiGet, getRoot as apiGetRoot, isFinal, ProcessEntry } from '../../../api/process';
import { NotFoundPage } from '../../pages';
import {
ProcessAnsibleActivity,
Expand Down Expand Up @@ -116,13 +116,23 @@ const ProcessActivity = (props: ExternalProps) => {
}, []);

const [process, setProcess] = useState<ProcessEntry>();
const rootProcessRef = useRef<ProcessEntry | null>(null);

const fetchData = useCallback(async () => {
const process = await apiGet(props.instanceId, []);
setProcess(process);

if (process.parentInstanceId && !rootProcessRef.current) {
rootProcessRef.current = await apiGetRoot(process.parentInstanceId);
}

return !isFinal(process.status);
}, [props.instanceId]);

useEffect(() => {
rootProcessRef.current = null;
}, [props.instanceId]);

useStatusFavicon(process);

const refreshHandler = useCallback(() => {
Expand All @@ -145,6 +155,7 @@ const ProcessActivity = (props: ExternalProps) => {
loading={loading}
instanceId={instanceId}
process={process}
rootInstanceId={rootProcessRef.current?.instanceId}
refresh={refreshHandler}
stickyRef={stickyRef}
/>
Expand Down
41 changes: 29 additions & 12 deletions console2/src/components/organisms/RestartProcessPopup/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ import { SingleOperationPopup } from '../../molecules';
import { memo, useCallback } from 'react';
import { restart as apiRestart } from '../../../api/process';
import { useState } from 'react';
import {Message} from "semantic-ui-react";
import { Message } from "semantic-ui-react";

interface ExternalProps {
instanceId: ConcordId;
parentInstanceId?: ConcordId;
rootInstanceId?: ConcordId;
refresh: () => void;
trigger: (onClick: () => void) => React.ReactNode;
}
Expand All @@ -40,9 +40,9 @@ const RestartProcessPopup = memo((props: ExternalProps) => {
const [success, setSuccess] = useState(false);

const instanceId = props.instanceId;
const parentInstanceId = props.parentInstanceId;
const rootInstanceId = props.rootInstanceId;

const cancelProcess = useCallback(async () => {
const restartProcess = useCallback(async () => {
setRestarting(true);

try {
Expand All @@ -68,13 +68,30 @@ const RestartProcessPopup = memo((props: ExternalProps) => {
trigger={trigger}
title="Restart the process?"
introMsg={
<>
<p>Are you sure you want to restart the selected process?</p>
{parentInstanceId && <Message warning>
<Message.Header>Warning!</Message.Header>
<p>The root process will be restarted</p>
</Message>}
</>
<>
{!rootInstanceId && <p>Are you sure you want to restart the selected process?</p>}
{rootInstanceId &&
<>
<Message warning>
<Message.Header>You are about to restart a child process. Please note:</Message.Header>
<Message.List style={{marginTop: "10px"}}>
<Message.Item>
Only the <a href={`#/process/${rootInstanceId}/log`} target="_blank"
rel="noopener noreferrer">parent (root) process</a> will be restarted.
</Message.Item>
<Message.Item>
Restarting the parent process may also re-run this and other child processes.
</Message.Item>
<Message.Item>
Ensure that this is the desired action before proceeding.
</Message.Item>
</Message.List>
</Message>

<p>Do you want to continue with restarting the parent process?</p>
</>
}
</>
}
running={restarting}
runningMsg={<p>Restarting...</p>}
Expand All @@ -83,7 +100,7 @@ const RestartProcessPopup = memo((props: ExternalProps) => {
error={error}
reset={reset}
onDone={refresh}
onConfirm={cancelProcess}
onConfirm={restartProcess}
/>
);
});
Expand Down

0 comments on commit 0c8fd26

Please sign in to comment.