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>