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/31 21:45:22 UTC
[camel-karavan] branch main updated: Implement #509
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
The following commit(s) were added to refs/heads/main by this push:
new 2321709 Implement #509
2321709 is described below
commit 2321709d6ab5f5f00374a00349458d7a4806f121
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Mon Oct 31 17:45:09 2022 -0400
Implement #509
---
.../org/apache/camel/karavan/api/StatusResource.java | 13 +++++++++++--
.../camel/karavan/service/InfinispanService.java | 12 ++++++++++++
.../apache/camel/karavan/service/StatusService.java | 16 ++++++++++++----
karavan-app/src/main/webapp/src/api/KaravanApi.tsx | 11 +++++++++++
.../src/main/webapp/src/dashboard/DashboardPage.tsx | 19 +++++++++++++++++--
5 files changed, 63 insertions(+), 8 deletions(-)
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java b/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java
index 8d75560..aa097d2 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/StatusResource.java
@@ -32,6 +32,7 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import java.util.List;
import java.util.Optional;
@Path("/api/status")
@@ -74,8 +75,8 @@ public class StatusResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/camel/{projectId}/{env}")
- public Response getCamelStatus(@PathParam("projectId") String projectId, @PathParam("env") String env) {
- bus.publish(StatusService.CMD_COLLECT_STATUSES, projectId);
+ public Response getCamelStatusByProjectAndEnv(@PathParam("projectId") String projectId, @PathParam("env") String env) {
+ bus.publish(StatusService.CMD_COLLECT_PROJECT_STATUS, projectId);
CamelStatus status = infinispanService.getCamelStatus(projectId, env);
if (status != null) {
return Response.ok(status).build();
@@ -83,4 +84,12 @@ public class StatusResource {
return Response.noContent().build();
}
}
+
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ @Path("/camel/{env}")
+ public List<CamelStatus> getCamelStatusByEnv(@PathParam("env") String env) {
+ bus.publish(StatusService.CMD_COLLECT_ALL_STATUSES, "");
+ return infinispanService.getCamelStatuses(env);
+ }
}
\ No newline at end of file
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/InfinispanService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/InfinispanService.java
index 0103894..dd4cc70 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/InfinispanService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/InfinispanService.java
@@ -267,6 +267,18 @@ public class InfinispanService {
return camelStatuses.get(GroupedKey.create(projectId, env));
}
+ public List<CamelStatus> getCamelStatuses(String env) {
+ if (cacheManager == null) {
+ return camelStatuses.values().stream()
+ .filter(s -> s.getEnv().equals(env))
+ .collect(Collectors.toList());
+ } else {
+ QueryFactory queryFactory = Search.getQueryFactory((RemoteCache<?, ?>) camelStatuses);
+ return queryFactory.<CamelStatus>create("FROM karavan.CamelStatus WHERE env = :env")
+ .setParameter("env", env)
+ .execute().list();
+ }
+ }
public void saveCamelStatus(CamelStatus status) {
camelStatuses.put(GroupedKey.create(status.getProjectId(), status.getEnv()), status);
}
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java
index da8a501..06f95f2 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java
@@ -39,7 +39,8 @@ import java.util.stream.Collectors;
public class StatusService {
private static final Logger LOGGER = Logger.getLogger(StatusService.class.getName());
- public static final String CMD_COLLECT_STATUSES = "collect-statuses";
+ public static final String CMD_COLLECT_PROJECT_STATUS = "collect-project-status";
+ public static final String CMD_COLLECT_ALL_STATUSES = "collect-all-statuses";
public static final String CMD_SAVE_STATUS = "save-statuses";
@Inject
@@ -71,15 +72,22 @@ public class StatusService {
return webClient;
}
-
- @ConsumeEvent(value = CMD_COLLECT_STATUSES, blocking = true, ordered = true)
- public void collectStatuses(String projectId) {
+ @ConsumeEvent(value = CMD_COLLECT_PROJECT_STATUS, blocking = true, ordered = true)
+ public void collectProjectStatus(String projectId) {
if ((System.currentTimeMillis() - lastCollect) > threshold) {
collectStatusesForProject(projectId);
lastCollect = System.currentTimeMillis();
}
}
+ @ConsumeEvent(value = CMD_COLLECT_ALL_STATUSES, blocking = true, ordered = true)
+ public void collectAllStatuses(String data) {
+ if ((System.currentTimeMillis() - lastCollect) > threshold) {
+ infinispanService.getProjects().forEach(project -> eventBus.publish(CMD_COLLECT_PROJECT_STATUS, project.getProjectId()));
+ lastCollect = System.currentTimeMillis();
+ }
+ }
+
@ConsumeEvent(value = CMD_SAVE_STATUS, blocking = true, ordered = true)
public void saveStatus(String status) {
try {
diff --git a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
index 0982b85..46151c2 100644
--- a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
+++ b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
@@ -189,6 +189,17 @@ export class KaravanApi {
});
}
+ static async getAllCamelStatuses(env: string, after: (statuses: CamelStatus[]) => void) {
+ instance.get('/api/status/camel/' + env)
+ .then(res => {
+ if (res.status === 200) {
+ after(res.data);
+ }
+ }).catch(err => {
+ console.log(err);
+ });
+ }
+
static async getProjects(after: (projects: Project[]) => void) {
instance.get('/api/project')
.then(res => {
diff --git a/karavan-app/src/main/webapp/src/dashboard/DashboardPage.tsx b/karavan-app/src/main/webapp/src/dashboard/DashboardPage.tsx
index 6eafbc7..3790cc2 100644
--- a/karavan-app/src/main/webapp/src/dashboard/DashboardPage.tsx
+++ b/karavan-app/src/main/webapp/src/dashboard/DashboardPage.tsx
@@ -14,8 +14,7 @@ import {
} from '@patternfly/react-core';
import '../designer/karavan.css';
import {MainToolbar} from "../MainToolbar";
-import RefreshIcon from '@patternfly/react-icons/dist/esm/icons/sync-alt-icon';
-import {DeploymentStatus, Project, ServiceStatus} from "../projects/ProjectModels";
+import {CamelStatus, DeploymentStatus, Project, ServiceStatus} from "../projects/ProjectModels";
import {TableComposable, TableVariant, Tbody, Td, Th, Thead, Tr} from "@patternfly/react-table";
import {camelIcon, CamelUi} from "../designer/utils/CamelUi";
import {KaravanApi} from "../api/KaravanApi";
@@ -33,6 +32,7 @@ interface State {
projects: Project[],
deploymentStatuses: DeploymentStatus[],
serviceStatuses: ServiceStatus[],
+ camelStatuses: CamelStatus[],
isCreateModalOpen: boolean,
isDeleteModalOpen: boolean,
isCopy: boolean,
@@ -51,6 +51,7 @@ export class DashboardPage extends React.Component<Props, State> {
projects: [],
deploymentStatuses: [],
serviceStatuses: [],
+ camelStatuses: [],
isCreateModalOpen: false,
isDeleteModalOpen: false,
isCopy: false,
@@ -81,6 +82,20 @@ export class DashboardPage extends React.Component<Props, State> {
KaravanApi.getAllServiceStatuses((statuses: ServiceStatus[]) => {
this.setState({serviceStatuses: statuses});
});
+ this.getSelectedEnvironments().forEach(env => {
+ KaravanApi.getAllCamelStatuses(env,(statuses: CamelStatus[]) => {
+ this.setState((state) => {
+ statuses.forEach(newStatus => {
+ const index = state.camelStatuses.findIndex(s => s.projectId === newStatus.projectId && s.env === newStatus.env);
+ if (index !== -1) {
+ state.camelStatuses.splice(index, 1);
+ }
+ state.camelStatuses.push(newStatus);
+ })
+ return state;
+ })
+ });
+ })
});
}