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 <marat.gubaidul...@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>