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>