You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2023/05/04 01:50:35 UTC

[camel-karavan] 06/07: Delete container prototype for #757

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

commit e08a631686a5c5c93352b29aa06f6d0d3476d111
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Wed May 3 18:23:10 2023 -0400

    Delete container prototype for #757
---
 .../camel/karavan/api/KubernetesResource.java      |  2 +-
 .../src/main/webui/src/projects/ProjectEventBus.ts |  8 ++++---
 .../src/main/webui/src/projects/ProjectLog.tsx     |  8 +++++--
 .../webui/src/projects/ProjectRunnerToolbar.tsx    | 27 ++++++++++++++++++----
 4 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/api/KubernetesResource.java b/karavan-app/src/main/java/org/apache/camel/karavan/api/KubernetesResource.java
index 334953f3..a04c3cd6 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/api/KubernetesResource.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/KubernetesResource.java
@@ -163,7 +163,7 @@ public class KubernetesResource {
     @Path("/pod/{env}/{name}")
     public Response deletePod(@PathParam("env") String env, @PathParam("name") String name) throws Exception {
         kubernetesService.deletePod(name, kubernetesService.getNamespace());
-        return Response.ok().build();
+        return Response.accepted().build();
     }
 
     @GET
diff --git a/karavan-app/src/main/webui/src/projects/ProjectEventBus.ts b/karavan-app/src/main/webui/src/projects/ProjectEventBus.ts
index 8f6399c3..93535629 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectEventBus.ts
+++ b/karavan-app/src/main/webui/src/projects/ProjectEventBus.ts
@@ -25,15 +25,16 @@ export class ShowLogCommand {
     type: 'container' | 'pipeline'
     name: string
     environment: string
+    show: boolean
 
-    constructor(type: "container" | "pipeline", name: string, environment: string) {
+    constructor(type: "container" | "pipeline", name: string, environment: string, show: boolean) {
         this.type = type;
         this.name = name;
         this.environment = environment;
+        this.show = show;
     }
 }
 
-
 export const ProjectEventBus = {
 
     selectProject: (project: Project) => currentProject.next(project),
@@ -42,6 +43,7 @@ export const ProjectEventBus = {
     selectProjectFile: (fileName: string) => currentFile.next(fileName),
     onSelectProjectFile: () => currentFile.asObservable(),
 
-    showLog: (type: 'container' | 'pipeline', name: string, environment: string) => showLog.next(new ShowLogCommand(type, name, environment)),
+    showLog: (type: 'container' | 'pipeline', name: string, environment: string, show: boolean = true) =>
+        showLog.next(new ShowLogCommand(type, name, environment, show)),
     onShowLog: () => showLog.asObservable(),
 }
diff --git a/karavan-app/src/main/webui/src/projects/ProjectLog.tsx b/karavan-app/src/main/webui/src/projects/ProjectLog.tsx
index bd9cac9e..82b5fb23 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectLog.tsx
+++ b/karavan-app/src/main/webui/src/projects/ProjectLog.tsx
@@ -41,8 +41,12 @@ export class ProjectLog extends React.Component<Props, State> {
     componentDidMount() {
         this.eventSource?.close();
         this.sub = ProjectEventBus.onShowLog()?.subscribe((log: ShowLogCommand) => {
-            this.setState({showLog: true, log: log, data: ''});
-            this.showLogs(log.type, log.name, log.environment);
+            this.setState({showLog: log.show, log: log, data: ''});
+            if (log.show) {
+                this.showLogs(log.type, log.name, log.environment);
+            } else {
+                this.eventSource?.close();
+            }
         });
     }
 
diff --git a/karavan-app/src/main/webui/src/projects/ProjectRunnerToolbar.tsx b/karavan-app/src/main/webui/src/projects/ProjectRunnerToolbar.tsx
index f3850ecd..cfa6c3e9 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectRunnerToolbar.tsx
+++ b/karavan-app/src/main/webui/src/projects/ProjectRunnerToolbar.tsx
@@ -20,14 +20,17 @@ interface Props {
 
 export const ProjectRunnerToolbar = (props: Props) => {
 
+    const [podName, setPodName] = useState('');
     const [isJbangRunning, setJbangIsRunning] = useState(false);
     const [isRunning, setIsRunning] = useState(false);
+    const [isDeletingPod, setIsDeletingPod] = useState(false);
 
     function jbangRun () {
         setJbangIsRunning(true);
         KaravanApi.runProject(props.project, res => {
             if (res.status === 200 || res.status === 201) {
                 setJbangIsRunning(false);
+                setPodName(res.data);
                 ProjectEventBus.showLog('container', res.data, props.config.environment)
             } else {
                 // Todo notification
@@ -36,6 +39,19 @@ export const ProjectRunnerToolbar = (props: Props) => {
         });
     }
 
+    function deletePod () {
+        setIsDeletingPod(true);
+        KaravanApi.deletePod(props.config.environment, podName, res => {
+            if (res.status === 202) {
+                setIsDeletingPod(false);
+            } else {
+                // Todo notification
+                setIsDeletingPod(false);
+            }
+            ProjectEventBus.showLog('container', res.data, props.config.environment, false)
+        });
+    }
+
     return (
         <React.Fragment>
             <div className="runner-toolbar">
@@ -54,6 +70,7 @@ export const ProjectRunnerToolbar = (props: Props) => {
                 <div className="row">
                     <Tooltip content="Runtime run" position={TooltipPosition.left}>
                         <Button isLoading={isRunning ? true : undefined}
+                                isDisabled
                                 isSmall
                                 variant={"secondary"}
                                 className="project-button"
@@ -65,14 +82,14 @@ export const ProjectRunnerToolbar = (props: Props) => {
                     </Tooltip>
                 </div>
                 <div className="row">
-                    <Tooltip content="Delete container" position={TooltipPosition.left}>
-                        <Button isSmall
+                    <Tooltip content="Delete pod" position={TooltipPosition.left}>
+                        <Button isLoading={isDeletingPod ? true : undefined}
+                                isSmall
                                 variant={"secondary"}
                                 className="project-button"
                                 icon={!isRunning ? <DeleteIcon/> : <div></div>}
-                                onClick={() => {
-                                }}>
-                            Delete
+                                onClick={() => deletePod()}>
+                            {isDeletingPod ? "..." : "Delete"}
                         </Button>
                     </Tooltip>
                 </div>