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:56 UTC
[camel-karavan] 06/08: Get DeploymentStatus fron 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 72707e7c2de18d51c8fb207e4c4f253c0698e2b9
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Thu Oct 27 10:29:25 2022 -0400
Get DeploymentStatus fron new API
---
karavan-app/src/main/webapp/src/Main.tsx | 3 +-
karavan-app/src/main/webapp/src/api/KaravanApi.tsx | 11 +++++
.../src/main/webapp/src/projects/ProjectInfo.tsx | 48 +++++++++++-----------
.../src/main/webapp/src/projects/ProjectModels.ts | 7 ++--
.../src/main/webapp/src/projects/ProjectPage.tsx | 3 +-
.../src/main/webapp/src/projects/ProjectsPage.tsx | 20 ++++++---
6 files changed, 55 insertions(+), 37 deletions(-)
diff --git a/karavan-app/src/main/webapp/src/Main.tsx b/karavan-app/src/main/webapp/src/Main.tsx
index adea4ca..4d7acb5 100644
--- a/karavan-app/src/main/webapp/src/Main.tsx
+++ b/karavan-app/src/main/webapp/src/Main.tsx
@@ -32,7 +32,6 @@ import EipIcon from "@patternfly/react-icons/dist/js/icons/topology-icon";
import ComponentsIcon from "@patternfly/react-icons/dist/js/icons/module-icon";
import ConfigurationIcon from "@patternfly/react-icons/dist/js/icons/cogs-icon";
import {MainLogin} from "./MainLogin";
-import {Thenable} from "monaco-editor";
class ToastMessage {
id: string = ''
@@ -125,7 +124,7 @@ export class Main extends React.Component<Props, State> {
getData() {
KaravanApi.getConfiguration((config: any) => {
- this.setState({ config: config })
+ this.setState({ config: config });
});
this.updateKamelets();
this.updateComponents();
diff --git a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
index 50379ba..d05e95b 100644
--- a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
+++ b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
@@ -290,6 +290,17 @@ export class KaravanApi {
});
}
+ static async getDeploymentStatuses(env: string, after: (statuses: DeploymentStatus[]) => void) {
+ instance.get('/api/kubernetes/deployment/' + env)
+ .then(res => {
+ if (res.status === 200) {
+ after(res.data);
+ }
+ }).catch(err => {
+ console.log(err);
+ });
+ }
+
static async rolloutDeployment(name: string, environment: string, after: (res: AxiosResponse<any>) => void) {
instance.post('/api/kubernetes/deployment/rollout/' + 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 16ce1a3..0148cab 100644
--- a/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx
+++ b/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx
@@ -263,34 +263,34 @@ export class ProjectInfo extends React.Component<Props, State> {
}
getPodsPanel(deploymentStatus: DeploymentStatus, env: string) {
- const podStatuses = deploymentStatus.podStatuses;
+ // const podStatuses = deploymentStatus.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.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>*/}
+ {/* )*/}
+ {/* }*/}
+ {/*)}*/}
</LabelGroup>
</FlexItem>
<FlexItem>{env === "dev" && this.rolloutButton()}</FlexItem>
diff --git a/karavan-app/src/main/webapp/src/projects/ProjectModels.ts b/karavan-app/src/main/webapp/src/projects/ProjectModels.ts
index 16ae793..2f6eeb9 100644
--- a/karavan-app/src/main/webapp/src/projects/ProjectModels.ts
+++ b/karavan-app/src/main/webapp/src/projects/ProjectModels.ts
@@ -3,7 +3,6 @@ export class Project {
name: string = '';
description: string = '';
lastCommit: string = '';
- deployed: boolean = false;
public constructor(projectId: string, name: string, description: string, lastCommit: string);
public constructor(init?: Partial<Project>);
@@ -22,16 +21,18 @@ export class Project {
}
export class DeploymentStatus {
- projectId: string = '';
+ name: string = '';
+ env: string = '';
+ namespace: string = '';
image: string = '';
replicas: number = 0;
readyReplicas: number = 0;
unavailableReplicas: number = 0;
- podStatuses: PodStatus[] = []
}
export class PodStatus {
name: string = '';
+ phase: string = '';
started: boolean = false;
ready: boolean = false;
reason: string = '';
diff --git a/karavan-app/src/main/webapp/src/projects/ProjectPage.tsx b/karavan-app/src/main/webapp/src/projects/ProjectPage.tsx
index 8d2a38b..cc3a708 100644
--- a/karavan-app/src/main/webapp/src/projects/ProjectPage.tsx
+++ b/karavan-app/src/main/webapp/src/projects/ProjectPage.tsx
@@ -83,8 +83,7 @@ export class ProjectPage extends React.Component<Props, State> {
tab: "details",
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
};
componentDidMount() {
diff --git a/karavan-app/src/main/webapp/src/projects/ProjectsPage.tsx b/karavan-app/src/main/webapp/src/projects/ProjectsPage.tsx
index 0b290d8..744c19f 100644
--- a/karavan-app/src/main/webapp/src/projects/ProjectsPage.tsx
+++ b/karavan-app/src/main/webapp/src/projects/ProjectsPage.tsx
@@ -29,7 +29,7 @@ import '../designer/karavan.css';
import {MainToolbar} from "../MainToolbar";
import RefreshIcon from '@patternfly/react-icons/dist/esm/icons/sync-alt-icon';
import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
-import {Project} from "./ProjectModels";
+import {DeploymentStatus, Project} from "./ProjectModels";
import {TableComposable, Tbody, Td, Th, Thead, Tr} from "@patternfly/react-table";
import DeleteIcon from "@patternfly/react-icons/dist/js/icons/times-icon";
import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
@@ -45,6 +45,7 @@ interface Props {
interface State {
projects: Project[],
+ deploymentStatuses: DeploymentStatus[],
isCreateModalOpen: boolean,
isDeleteModalOpen: boolean,
isCopy: boolean,
@@ -60,6 +61,7 @@ export class ProjectsPage extends React.Component<Props, State> {
public state: State = {
projects: [],
+ deploymentStatuses: [],
isCreateModalOpen: false,
isDeleteModalOpen: false,
isCopy: false,
@@ -71,7 +73,7 @@ export class ProjectsPage extends React.Component<Props, State> {
interval: any;
componentDidMount() {
- this.interval = setInterval(() => this.onGetProjects(), 700);
+ this.interval = setInterval(() => this.onGetProjects(), 1300);
}
componentWillUnmount() {
@@ -112,6 +114,9 @@ export class ProjectsPage extends React.Component<Props, State> {
KaravanApi.getProjects((projects: Project[]) => {
this.setState({ projects: projects })
});
+ KaravanApi.getDeploymentStatuses(config.environment, (statuses: DeploymentStatus[]) => {
+ this.setState({ deploymentStatuses: statuses });
+ });
});
}
@@ -209,12 +214,15 @@ export class ProjectsPage extends React.Component<Props, State> {
)
}
+ isDeployed(projectId: string): boolean{
+ const ds = this.state.deploymentStatuses.find(ds => ds.name === projectId);
+ return ds ? (ds.replicas > 0 && ds.replicas === ds.readyReplicas) : false;
+ }
+
render() {
const runtime = this.props.config?.runtime ? this.props.config.runtime : "QUARKUS";
const projects = this.state.projects.filter(p => p.name.toLowerCase().includes(this.state.filter) || p.description.toLowerCase().includes(this.state.filter));
- const environments: string[] = this.props.config.environments && Array.isArray(this.props.config.environments)
- ? Array.from(this.props.config.environments)
- : [];
+ const environment: string = this.props.config.environment;
return (
<PageSection className="kamelet-section projects-page" padding={{default: 'noPadding'}}>
<PageSection className="tools-section" padding={{default: 'noPadding'}}>
@@ -255,7 +263,7 @@ export class ProjectsPage extends React.Component<Props, State> {
</Td>
<Td noPadding style={{width:"180px"}}>
<Flex direction={{default: "row"}}>
- <FlexItem key={"dev"}><Badge isRead={!project.deployed}>{"dev"}</Badge></FlexItem>
+ <FlexItem key={"dev"}><Badge isRead={!this.isDeployed(project.projectId)}>{"dev"}</Badge></FlexItem>
</Flex>
</Td>
<Td isActionCell>