This is an automated email from the ASF dual-hosted git repository.

marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git


The following commit(s) were added to refs/heads/main by this push:
     new 4ec0f0bd Fix #1408
4ec0f0bd is described below

commit 4ec0f0bdd233ab02dd9adb731d02a19463b7a763
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Fri Sep 13 19:29:22 2024 -0400

    Fix #1408
---
 .../apache/camel/karavan/docker/DockerService.java |  2 +-
 .../src/main/webui/src/api/ProjectService.ts       |  3 +--
 .../src/main/webui/src/project/DevModeToolbar.tsx  | 27 +++++++++++++++++++---
 3 files changed, 26 insertions(+), 6 deletions(-)

diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java 
b/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
index 4df0da97..025077c7 100644
--- 
a/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
+++ 
b/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java
@@ -323,7 +323,7 @@ public class DockerService {
         if (containers.size() == 1) {
             Container container = containers.get(0);
             if (container.getState().equals("running") || 
container.getState().equals("paused")) {
-                try (StopContainerCmd cmd = 
getDockerClient().stopContainerCmd(container.getId())) {
+                try (StopContainerCmd cmd = 
getDockerClient().stopContainerCmd(container.getId()).withTimeout(1)) {
                     cmd.exec();
                 }
             }
diff --git a/karavan-app/src/main/webui/src/api/ProjectService.ts 
b/karavan-app/src/main/webui/src/api/ProjectService.ts
index 575f0aa7..ff6c1511 100644
--- a/karavan-app/src/main/webui/src/api/ProjectService.ts
+++ b/karavan-app/src/main/webui/src/api/ProjectService.ts
@@ -66,7 +66,6 @@ export class ProjectService {
         KaravanApi.manageContainer(project.projectId, 'devmode', 
project.projectId, 'stop',  'never',res => {
             useDevModeStore.setState({status: 'none'})
             if (res.status === 200) {
-                useLogStore.setState({showLog: false, type: 'container'})
             } else {
                 EventBus.sendAlert('Error stopping DevMode container', 
res.statusText, 'warning')
             }
@@ -75,7 +74,7 @@ export class ProjectService {
 
     public static pauseDevModeContainer(project: Project) {
         useDevModeStore.setState({status: 'wip'})
-        KaravanApi.manageContainer(project.projectId, 'devmode', 
project.projectId, 'pause', 'never',res => {
+        KaravanApi.manageContainer(project.projectId, 'devmode', 
project.projectId, 'pause', 'never', res => {
             useDevModeStore.setState({status: 'none'})
             if (res.status === 200) {
                 useLogStore.setState({showLog: false, type: 'container'})
diff --git a/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx 
b/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
index e8af4bcc..c1af0221 100644
--- a/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
+++ b/karavan-app/src/main/webui/src/project/DevModeToolbar.tsx
@@ -31,13 +31,14 @@ import '../designer/karavan.css';
 import RocketIcon from "@patternfly/react-icons/dist/esm/icons/rocket-icon";
 import ReloadIcon from "@patternfly/react-icons/dist/esm/icons/bolt-icon";
 import DeleteIcon from "@patternfly/react-icons/dist/esm/icons/trash-icon";
-import {useLogStore, useProjectStore, useStatusesStore} from 
"../api/ProjectStore";
+import {useAppConfigStore, useLogStore, useProjectStore, useStatusesStore} 
from "../api/ProjectStore";
 import {ProjectService} from "../api/ProjectService";
 import {shallow} from "zustand/shallow";
 import UpIcon from "@patternfly/react-icons/dist/esm/icons/running-icon";
 import DownIcon from 
"@patternfly/react-icons/dist/esm/icons/error-circle-o-icon";
 import {ContainerStatus} from "../api/ProjectModels";
 import "./DevModeToolbar.css"
+import StopIcon from "@patternfly/react-icons/dist/js/icons/stop-icon";
 
 interface Props {
     reloadOnly?: boolean
@@ -45,6 +46,7 @@ interface Props {
 
 export function DevModeToolbar(props: Props) {
 
+    const [config] = useAppConfigStore((state) => [state.config], shallow);
     const [project, refreshTrace] = useProjectStore((state) => [state.project, 
state.refreshTrace], shallow)
     const [containers] = useStatusesStore((state) => [state.containers], 
shallow);
     const [verbose, setVerbose] = useState(false);
@@ -52,6 +54,7 @@ export function DevModeToolbar(props: Props) {
     const [setShowLog] = useLogStore((s) => [s.setShowLog], shallow);
     const [currentContainerStatus] = useState<ContainerStatus>();
 
+    const isKubernetes = config.infrastructure === 'kubernetes'
     const containerStatuses = containers.filter(c => c.projectId === 
project.projectId) || [];
 
     const containersProject = containerStatuses.filter(c => c.type === 
'project') || [];
@@ -61,6 +64,7 @@ export function DevModeToolbar(props: Props) {
     const containerDevMode = containerStatuses.filter(c => c.type === 
'devmode').at(0);
     const commands = containerDevMode?.commands || ['run'];
     const isRunning = containerDevMode?.state === 'running';
+    const showLogDevMode = containerDevMode && ['running', 'paused', 
'exited'].includes(containerDevMode?.state);
     const inTransit = containerDevMode?.inTransit;
     const color = (isRunning || allRunning) ? "green" : "grey";
     const icon = (isRunning || allRunning) ? <UpIcon/> : <DownIcon/>;
@@ -79,7 +83,9 @@ export function DevModeToolbar(props: Props) {
         {containersProject.length > 0 && <FlexItem>
             <Label icon={icon} color={color}>
                 <Tooltip content={"Show log"} 
position={TooltipPosition.bottom}>
-                    <Button className='labeled-button' variant="link" 
isDisabled={!allRunning}
+                    <Button className='labeled-button'
+                            variant="link"
+                            isDisabled={!allRunning}
                             onClick={e => {}}>
                         {project.projectId}
                     </Button>
@@ -91,7 +97,9 @@ export function DevModeToolbar(props: Props) {
         {containerDevMode?.containerId && <FlexItem>
             <Label icon={icon} color={color}>
                 <Tooltip content={"Show log"} 
position={TooltipPosition.bottom}>
-                    <Button className='labeled-button' variant="link" 
isDisabled={!isRunning}
+                    <Button className='labeled-button'
+                            variant="link"
+                            isDisabled={!showLogDevMode}
                             onClick={e =>
                                 setShowLog(true, 'container', 
containerDevMode.containerName)}>
                         {containerDevMode.containerName}
@@ -133,6 +141,19 @@ export function DevModeToolbar(props: Props) {
                 </Button>
             </Tooltip>
         </FlexItem>}
+        {inDevMode && !isKubernetes && <FlexItem 
className="dev-action-button-place">
+            <Tooltip content="Stop container" 
position={TooltipPosition.bottomEnd}>
+                <Button className="dev-action-button" size="sm"
+                        isDisabled={!commands.includes('stop') || inTransit}
+                        variant={"control"}
+                        icon={<StopIcon/>}
+                        onClick={() => {
+                            setShowSpinner(true);
+                            ProjectService.stopDevModeContainer(project);
+                        }}>
+                </Button>
+            </Tooltip>
+        </FlexItem>}
         {inDevMode && <FlexItem className="dev-action-button-place">
             <Tooltip content="Delete container" 
position={TooltipPosition.bottomEnd}>
                 <Button className="dev-action-button" size="sm"

Reply via email to