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 2022/10/28 00:16:57 UTC

[camel-karavan] 07/08: Get PodStatus from new API

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 441ac2ae32ed31b255c444a74c201d8823186d2a
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Thu Oct 27 10:39:16 2022 -0400

    Get PodStatus from new API
---
 .../camel/karavan/api/KubernetesResource.java      |  9 ++++
 karavan-app/src/main/webapp/src/api/KaravanApi.tsx | 20 +++++++-
 .../src/main/webapp/src/projects/ProjectInfo.tsx   | 59 ++++++++++++----------
 3 files changed, 60 insertions(+), 28 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 c79fc51..ebe0cc1 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
@@ -137,6 +137,15 @@ public class KubernetesResource {
                 .collect(Collectors.toList());
     }
 
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("/pod/{projectId}/{env}")
+    public List<PodStatus> getPodStatusesByProjectAndEnv(@PathParam("projectId") String projectId, @PathParam("env") String env) throws Exception {
+        return infinispanService.getPodStatuses(projectId, env).stream()
+                .sorted(Comparator.comparing(PodStatus::getName))
+                .collect(Collectors.toList());
+    }
+
     @DELETE
     @Produces(MediaType.APPLICATION_JSON)
     @Consumes(MediaType.APPLICATION_JSON)
diff --git a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
index d05e95b..ad3b9a6 100644
--- a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
+++ b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
@@ -1,5 +1,12 @@
 import axios, {AxiosResponse} from "axios";
-import {CamelStatus, DeploymentStatus, PipelineStatus, Project, ProjectFile} from "../projects/ProjectModels";
+import {
+    CamelStatus,
+    DeploymentStatus,
+    PipelineStatus,
+    PodStatus,
+    Project,
+    ProjectFile
+} from "../projects/ProjectModels";
 import {Buffer} from 'buffer';
 import {SsoApi} from "./SsoApi";
 
@@ -319,6 +326,17 @@ export class KaravanApi {
         });
     }
 
+    static async getProjectPodStatuses(project: string, env: string, after: (statuses: PodStatus[]) => void) {
+        instance.get('/api/kubernetes/pod/' + project + "/" + env)
+            .then(res => {
+                if (res.status === 200) {
+                    after(res.data);
+                }
+            }).catch(err => {
+            console.log(err);
+        });
+    }
+
     static async deletePod(environment: string, name: string, after: (res: AxiosResponse<any>) => void) {
         instance.delete('/api/kubernetes/pod/' + environment + '/' + name)
             .then(res => {
diff --git a/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx b/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx
index 0148cab..acbb7b2 100644
--- a/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx
+++ b/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx
@@ -11,7 +11,7 @@ import {
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
 import {KaravanApi} from "../api/KaravanApi";
-import {DeploymentStatus, Project, PipelineStatus, CamelStatus} from "./ProjectModels";
+import {DeploymentStatus, Project, PipelineStatus, CamelStatus, PodStatus} from "./ProjectModels";
 import BuildIcon from "@patternfly/react-icons/dist/esm/icons/build-icon";
 import RolloutIcon from "@patternfly/react-icons/dist/esm/icons/process-automation-icon";
 import PushIcon from "@patternfly/react-icons/dist/esm/icons/code-branch-icon";
@@ -31,6 +31,7 @@ interface State {
     project?: Project,
     pipelineStatus?: PipelineStatus,
     deploymentStatus?: DeploymentStatus,
+    podStatuses: PodStatus[],
     camelStatus?: CamelStatus,
     isPushing: boolean,
     isBuilding: boolean,
@@ -48,14 +49,14 @@ export class ProjectInfo extends React.Component<Props, State> {
 
     public state: State = {
         project: this.props.project,
+        podStatuses: [],
         isPushing: false,
         isBuilding: false,
         isRolling: false,
         showDeleteConfirmation: false,
         environments: this.props.config.environments && Array.isArray(this.props.config.environments)
             ? Array.from(this.props.config.environments) : [],
-        environment: this.props.config.environments && Array.isArray(this.props.config.environments)
-            ? this.props.config.environments[0] : ''
+        environment: this.props.config.environment
     };
     interval: any;
 
@@ -89,6 +90,10 @@ export class ProjectInfo extends React.Component<Props, State> {
                 this.setState({key: Math.random().toString(), deploymentStatus: status});
                 // console.log(status);
             });
+            KaravanApi.getProjectPodStatuses(this.props.project.projectId, this.state.environment, (statuses: PodStatus[]) => {
+                this.setState({key: Math.random().toString(), podStatuses: statuses});
+                // console.log(status);
+            });
             KaravanApi.getProjectCamelStatus(this.props.project.projectId, (status: CamelStatus) => {
                 this.setState({key: Math.random().toString(), camelStatus: status});
                 // console.log(status);
@@ -263,34 +268,34 @@ export class ProjectInfo extends React.Component<Props, State> {
     }
 
     getPodsPanel(deploymentStatus: DeploymentStatus, env: string) {
-        // const podStatuses = deploymentStatus.podStatuses;
+        const podStatuses = this.state.podStatuses;
         return (
             <Flex justifyContent={{default: "justifyContentSpaceBetween"}} alignItems={{default: "alignItemsCenter"}}>
                 <FlexItem>
                     <LabelGroup numLabels={3}>
-                        {/*{(podStatuses === undefined || podStatuses.length === 0) && <Label icon={<DownIcon/>} color={"grey"}>No pods</Label>}*/}
-                        {/*{podStatuses.map(pod => {*/}
-                        {/*        const running = pod.started && pod.ready;*/}
-                        {/*        return (*/}
-                        {/*            <Tooltip key={pod.name} content={running ? "Running" : pod.reason}>*/}
-                        {/*                <Label icon={running ? <UpIcon/> : <DownIcon/>} color={running ? "green" : "red"}>*/}
-                        {/*                    <Button variant="link"*/}
-                        {/*                            onClick={e => this.props.showLog?.call(this, 'container', pod.name, env)}>*/}
-                        {/*                        {pod.name}*/}
-                        {/*                    </Button>*/}
-                        {/*                    <Tooltip content={"Delete Pod"}>*/}
-                        {/*                        <Button icon={<DeleteIcon/>} variant="link" onClick={e => this.setState({*/}
-                        {/*                            showDeleteConfirmation: true,*/}
-                        {/*                            deleteEntity: "pod",*/}
-                        {/*                            deleteEntityEnv: env,*/}
-                        {/*                            deleteEntityName: pod.name*/}
-                        {/*                        })}></Button>*/}
-                        {/*                    </Tooltip>*/}
-                        {/*                </Label>*/}
-                        {/*            </Tooltip>*/}
-                        {/*        )*/}
-                        {/*    }*/}
-                        {/*)}*/}
+                        {(podStatuses === undefined || podStatuses.length === 0) && <Label icon={<DownIcon/>} color={"grey"}>No pods</Label>}
+                        {podStatuses.map(pod => {
+                                const running = pod.phase === 'Running'
+                                return (
+                                    <Tooltip key={pod.name} content={running ? "Running" : pod.phase}>
+                                        <Label icon={running ? <UpIcon/> : <DownIcon/>} color={running ? "green" : "red"}>
+                                            <Button variant="link"
+                                                    onClick={e => this.props.showLog?.call(this, 'container', pod.name, env)}>
+                                                {pod.name}
+                                            </Button>
+                                            <Tooltip content={"Delete Pod"}>
+                                                <Button icon={<DeleteIcon/>} variant="link" onClick={e => this.setState({
+                                                    showDeleteConfirmation: true,
+                                                    deleteEntity: "pod",
+                                                    deleteEntityEnv: env,
+                                                    deleteEntityName: pod.name
+                                                })}></Button>
+                                            </Tooltip>
+                                        </Label>
+                                    </Tooltip>
+                                )
+                            }
+                        )}
                     </LabelGroup>
                 </FlexItem>
                 <FlexItem>{env === "dev" && this.rolloutButton()}</FlexItem>