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