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;
+                    })
+                });
+            })
         });
     }