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 <[email protected]>
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;
+                    })
+                });
+            })
         });
     }
 

Reply via email to