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 7aedac96cdf0bfb25c783ba5b754932949437516
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Fri Sep 23 18:17:00 2022 -0400

    Cleanup camel statuses
---
 .../org/apache/camel/karavan/api/GitResource.java  |   2 +-
 .../camel/karavan/api/KubernetesResource.java      |  24 ++--
 .../camel/karavan/api/ProjectFileResource.java     |   2 +-
 .../apache/camel/karavan/api/ProjectResource.java  |   8 +-
 .../apache/camel/karavan/api/StatusResource.java   |  46 +++---
 .../apache/camel/karavan/model/CamelStatus.java    |  92 ++++++++++++
 .../camel/karavan/model/ProjectEnvStatus.java      | 158 ---------------------
 .../camel/karavan/model/ProjectStoreSchema.java    |   2 +-
 .../camel/karavan/service/InfinispanService.java   |  17 ++-
 .../camel/karavan/service/StatusService.java       | 126 ++++++----------
 .../src/main/resources/application.properties      |   2 +-
 karavan-app/src/main/webapp/src/api/KaravanApi.tsx |  13 +-
 .../src/main/webapp/src/projects/ProjectInfo.tsx   |   6 +-
 13 files changed, 198 insertions(+), 300 deletions(-)

diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/api/GitResource.java 
b/karavan-app/src/main/java/org/apache/camel/karavan/api/GitResource.java
index 217e40e..a296ad6 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/api/GitResource.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/GitResource.java
@@ -44,7 +44,7 @@ public class GitResource {
     @POST
     @Produces(MediaType.APPLICATION_JSON)
     @Consumes(MediaType.APPLICATION_JSON)
-    public Project push(@HeaderParam("username") String username, Project 
project) throws Exception {
+    public Project push(Project project) throws Exception {
         Project p = infinispanService.getProject(project.getProjectId());
         List<ProjectFile> files = 
infinispanService.getProjectFiles(project.getProjectId());
         String commitId = gitService.commitAndPushProject(p, files);
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 162310c..e7586a8 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
@@ -60,7 +60,7 @@ public class KubernetesResource {
     @Produces(MediaType.APPLICATION_JSON)
     @Consumes(MediaType.APPLICATION_JSON)
     @Path("/pipeline/{environment}")
-    public Project createPipeline(@HeaderParam("username") String username, 
@PathParam("environment") String environment, Project project) throws Exception 
{
+    public Project createPipeline(@PathParam("environment") String 
environment, Project project) throws Exception {
         Project p = infinispanService.getProject(project.getProjectId());
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
@@ -74,7 +74,7 @@ public class KubernetesResource {
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/pipeline/{environment}/{name}")
-    public Response getPipeline(@HeaderParam("username") String username, 
@PathParam("environment") String environment,
+    public Response getPipeline(@PathParam("environment") String environment,
                         @PathParam("name") String name) throws Exception {
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
@@ -87,7 +87,7 @@ public class KubernetesResource {
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/pipeline/log/{environment}/{name}")
-    public Response getPipelineLog(@HeaderParam("username") String username, 
@PathParam("environment") String environment,
+    public Response getPipelineLog(@PathParam("environment") String 
environment,
                         @PathParam("name") String name) throws Exception {
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
@@ -100,7 +100,7 @@ public class KubernetesResource {
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/container/log/{environment}/{name}")
-    public Response getContainerLog(@HeaderParam("username") String username, 
@PathParam("environment") String environment,
+    public Response getContainerLog(@PathParam("environment") String 
environment,
                                    @PathParam("name") String name) throws 
Exception {
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
@@ -114,7 +114,7 @@ public class KubernetesResource {
     @Produces(MediaType.APPLICATION_JSON)
     @Consumes(MediaType.APPLICATION_JSON)
     @Path("/deployment/rollout/{environment}/{name}")
-    public Response rollout(@HeaderParam("username") String username, 
@PathParam("environment") String environment, @PathParam("name") String name) 
throws Exception {
+    public Response rollout(@PathParam("environment") String environment, 
@PathParam("name") String name) throws Exception {
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
             kubernetesService.rolloutDeployment(name, env.get().namespace());
@@ -127,7 +127,7 @@ public class KubernetesResource {
     @Produces(MediaType.APPLICATION_JSON)
     @Consumes(MediaType.APPLICATION_JSON)
     @Path("/deployment/{environment}/{name}")
-    public Response deleteDeployment(@HeaderParam("username") String username, 
@PathParam("environment") String environment, @PathParam("name") String name) 
throws Exception {
+    public Response deleteDeployment(@PathParam("environment") String 
environment, @PathParam("name") String name) throws Exception {
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
             kubernetesService.deleteDeployment(name, env.get().namespace());
@@ -143,7 +143,7 @@ public class KubernetesResource {
     @Produces(MediaType.APPLICATION_JSON)
     @Consumes(MediaType.APPLICATION_JSON)
     @Path("/pod/{environment}/{name}")
-    public Response deletePod(@HeaderParam("username") String username, 
@PathParam("environment") String environment, @PathParam("name") String name) 
throws Exception {
+    public Response deletePod(@PathParam("environment") String environment, 
@PathParam("name") String name) throws Exception {
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
             kubernetesService.deletePod(name, env.get().namespace());
@@ -155,7 +155,7 @@ public class KubernetesResource {
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/imagetag/{environment}/{projectId}")
-    public Response getProjectImageTags(@HeaderParam("username") String 
username, @PathParam("environment") String environment, @PathParam("projectId") 
String projectId) throws Exception {
+    public Response getProjectImageTags(@PathParam("environment") String 
environment, @PathParam("projectId") String projectId) throws Exception {
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
             return 
Response.ok(kubernetesService.getProjectImageTags(projectId, 
env.get().namespace())).build();
@@ -166,7 +166,7 @@ public class KubernetesResource {
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/configmap/{environment}")
-    public Response getConfigMaps(@HeaderParam("username") String username, 
@PathParam("environment") String environment) throws Exception {
+    public Response getConfigMaps(@PathParam("environment") String 
environment) throws Exception {
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
             return 
Response.ok(kubernetesService.getConfigMaps(env.get().namespace())).build();
@@ -177,7 +177,7 @@ public class KubernetesResource {
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/secret/{environment}")
-    public Response getSecrets(@HeaderParam("username") String username, 
@PathParam("environment") String environment) throws Exception {
+    public Response getSecrets(@PathParam("environment") String environment) 
throws Exception {
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
             return 
Response.ok(kubernetesService.getSecrets(env.get().namespace())).build();
@@ -188,7 +188,7 @@ public class KubernetesResource {
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/service/{environment}")
-    public Response getServices(@HeaderParam("username") String username, 
@PathParam("environment") String environment) throws Exception {
+    public Response getServices(@PathParam("environment") String environment) 
throws Exception {
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
             return 
Response.ok(kubernetesService.getServices(env.get().namespace())).build();
@@ -200,7 +200,7 @@ public class KubernetesResource {
     @GET
     @Path("/container/log/watch/{environment}/{name}")
     @Produces(MediaType.SERVER_SENT_EVENTS)
-    public Multi<String> getContainerLogWatch(@HeaderParam("username") String 
username, @PathParam("environment") String environment, @PathParam("name") 
String name){
+    public Multi<String> getContainerLogWatch(@PathParam("environment") String 
environment, @PathParam("name") String name){
         LOGGER.info("Start sourcing");
         Optional<KaravanConfiguration.Environment> env = 
configuration.environments().stream().filter(e -> 
e.name().equals(environment)).findFirst();
         if (env.isPresent()) {
diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java
 
b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java
index acd66c0..188f1a0 100644
--- 
a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java
+++ 
b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectFileResource.java
@@ -54,7 +54,7 @@ public class ProjectFileResource {
     @POST
     @Produces(MediaType.APPLICATION_JSON)
     @Consumes(MediaType.APPLICATION_JSON)
-    public ProjectFile save(@HeaderParam("username") String username, 
ProjectFile file) throws Exception {
+    public ProjectFile save(ProjectFile file) throws Exception {
         infinispanService.saveProjectFile(file);
         return file;
     }
diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java 
b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java
index 253f46d..2f83fc2 100644
--- 
a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java
+++ 
b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java
@@ -46,7 +46,7 @@ public class ProjectResource {
 
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    public List<Project> getAll(@HeaderParam("username") String username) 
throws Exception {
+    public List<Project> getAll() throws Exception {
         return infinispanService.getProjects().stream()
                 .sorted(Comparator.comparing(Project::getProjectId))
                 .collect(Collectors.toList());
@@ -55,14 +55,14 @@ public class ProjectResource {
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/{project}")
-    public Project get(@HeaderParam("username") String username, 
@PathParam("project") String project) throws Exception {
+    public Project get(@PathParam("project") String project) throws Exception {
         return infinispanService.getProject(project);
     }
 
     @POST
     @Produces(MediaType.APPLICATION_JSON)
     @Consumes(MediaType.APPLICATION_JSON)
-    public Project save(@HeaderParam("username") String username, Project 
project) throws Exception {
+    public Project save(Project project) throws Exception {
         infinispanService.saveProject(project);
         return project;
     }
@@ -81,7 +81,7 @@ public class ProjectResource {
     @Produces(MediaType.APPLICATION_JSON)
     @Consumes(MediaType.APPLICATION_JSON)
     @Path("/copy/{sourceProject}")
-    public Project copy(@HeaderParam("username") String username, 
@PathParam("sourceProject") String sourceProject, Project project) throws 
Exception {
+    public Project copy(@PathParam("sourceProject") String sourceProject, 
Project project) throws Exception {
 //        Save project
         Project s = infinispanService.getProject(sourceProject);
         project.setRuntime(s.getRuntime());
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 9492cc2..b68aaac 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
@@ -17,10 +17,12 @@
 package org.apache.camel.karavan.api;
 
 import io.vertx.core.eventbus.EventBus;
+import org.apache.camel.karavan.model.CamelStatus;
 import org.apache.camel.karavan.model.DeploymentStatus;
 import org.apache.camel.karavan.model.KaravanConfiguration;
 import org.apache.camel.karavan.model.PipelineStatus;
 import org.apache.camel.karavan.service.InfinispanService;
+import org.apache.camel.karavan.service.StatusService;
 import org.jboss.logging.Logger;
 
 import javax.inject.Inject;
@@ -40,16 +42,13 @@ public class StatusResource {
     @Inject
     InfinispanService infinispanService;
 
-    @Inject
-    KaravanConfiguration configuration;
-
     @Inject
     EventBus bus;
 
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/pipeline/{projectId}")
-    public Response getPipelineStatus(@HeaderParam("username") String 
username, @PathParam("projectId") String projectId) {
+    public Response getPipelineStatus(@PathParam("projectId") String 
projectId) {
         PipelineStatus status = infinispanService.getPipelineStatus(projectId);
         if (status != null) {
             return Response.ok(status).build();
@@ -61,7 +60,7 @@ public class StatusResource {
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/deployment/{projectId}")
-    public Response getDeploymentStatus(@HeaderParam("username") String 
username, @PathParam("projectId") String projectId) {
+    public Response getDeploymentStatus(@PathParam("projectId") String 
projectId) {
         DeploymentStatus status = 
infinispanService.getDeploymentStatus(projectId);
         if (status != null) {
             return Response.ok(status).build();
@@ -70,29 +69,16 @@ public class StatusResource {
         }
     }
 
-//    @GET
-//    @Produces(MediaType.APPLICATION_JSON)
-//    @Path("/projects")
-//    public Map<String, Map> getSimpleStatus(@HeaderParam("username") String 
username) throws Exception {
-//        Map<String, Map> result = new HashMap<>();
-//        infinispanService.getProjects().forEach(project -> {
-//            ProjectStatus ps = getStatus(username, project.getProjectId());
-//            Map<String, String> statuses = new HashMap<>();
-//            ps.getStatuses().forEach(pes -> {
-//                if (pes.getLastPipelineRunResult() == null || 
pes.getDeploymentStatus() == null || pes.getContextStatus() == null){
-//                    statuses.put(pes.getEnvironment(), "N/A");
-//                } else {
-//                    boolean pipelineOK = 
pes.getLastPipelineRunResult().equals("Succeeded");
-//                    System.out.println(pes.getLastPipelineRunResult());
-//                    boolean deploymentOK = 
pes.getDeploymentStatus().getReadyReplicas() == 
pes.getDeploymentStatus().getReplicas() && 
pes.getDeploymentStatus().getUnavailableReplicas() == 0;
-//                    boolean camelOK = 
pes.getContextStatus().equals(ProjectEnvStatus.Status.UP) && 
pes.getConsumerStatus().equals(ProjectEnvStatus.Status.UP) && 
pes.getRoutesStatus().equals(ProjectEnvStatus.Status.UP);
-//                    String status = (pipelineOK && deploymentOK && camelOK) 
? "UP" : "DOWN";
-//                    statuses.put(pes.getEnvironment(), status);
-//                }
-//            });
-//            result.put(project.getProjectId(), statuses);
-//        });
-//
-//        return result;
-//    }
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("/camel/{projectId}")
+    public Response getCamelStatus(@PathParam("projectId") String projectId) {
+        bus.publish(StatusService.CMD_COLLECT_STATUSES, projectId);
+        CamelStatus status = infinispanService.getCamelStatus(projectId);
+        if (status != null) {
+            return Response.ok(status).build();
+        } else {
+            return Response.noContent().build();
+        }
+    }
 }
\ No newline at end of file
diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/model/CamelStatus.java 
b/karavan-app/src/main/java/org/apache/camel/karavan/model/CamelStatus.java
new file mode 100644
index 0000000..a6e0e18
--- /dev/null
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/model/CamelStatus.java
@@ -0,0 +1,92 @@
+package org.apache.camel.karavan.model;
+
+import org.infinispan.protostream.annotations.ProtoEnumValue;
+import org.infinispan.protostream.annotations.ProtoFactory;
+import org.infinispan.protostream.annotations.ProtoField;
+
+public class CamelStatus {
+    public static final String CACHE = "camel_statuses";
+    @ProtoField(number = 1)
+    String projectId;
+    @ProtoField(number = 2)
+    Status contextStatus;
+    @ProtoField(number = 3)
+    Status consumerStatus;
+    @ProtoField(number = 4)
+    Status routesStatus;
+    @ProtoField(number = 5)
+    Status registryStatus;
+    @ProtoField(number = 6)
+    String contextVersion;
+
+    public enum Status {
+        @ProtoEnumValue(number = 0, name = "DOWN")
+        DOWN,
+        @ProtoEnumValue(number = 1, name = "UP")
+        UP,
+        @ProtoEnumValue(number = 2, name = "NA")
+        NA
+    }
+
+    @ProtoFactory
+    public CamelStatus(String projectId, Status contextStatus, Status 
consumerStatus, Status routesStatus, Status registryStatus, String 
contextVersion) {
+        this.projectId = projectId;
+        this.contextStatus = contextStatus;
+        this.consumerStatus = consumerStatus;
+        this.routesStatus = routesStatus;
+        this.registryStatus = registryStatus;
+        this.contextVersion = contextVersion;
+    }
+
+    public CamelStatus(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public Status getContextStatus() {
+        return contextStatus;
+    }
+
+    public void setContextStatus(Status contextStatus) {
+        this.contextStatus = contextStatus;
+    }
+
+    public Status getConsumerStatus() {
+        return consumerStatus;
+    }
+
+    public void setConsumerStatus(Status consumerStatus) {
+        this.consumerStatus = consumerStatus;
+    }
+
+    public Status getRoutesStatus() {
+        return routesStatus;
+    }
+
+    public void setRoutesStatus(Status routesStatus) {
+        this.routesStatus = routesStatus;
+    }
+
+    public Status getRegistryStatus() {
+        return registryStatus;
+    }
+
+    public void setRegistryStatus(Status registryStatus) {
+        this.registryStatus = registryStatus;
+    }
+
+    public String getContextVersion() {
+        return contextVersion;
+    }
+
+    public void setContextVersion(String contextVersion) {
+        this.contextVersion = contextVersion;
+    }
+}
diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/model/ProjectEnvStatus.java
 
b/karavan-app/src/main/java/org/apache/camel/karavan/model/ProjectEnvStatus.java
deleted file mode 100644
index 99192a6..0000000
--- 
a/karavan-app/src/main/java/org/apache/camel/karavan/model/ProjectEnvStatus.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package org.apache.camel.karavan.model;
-
-import org.infinispan.protostream.annotations.ProtoEnumValue;
-import org.infinispan.protostream.annotations.ProtoFactory;
-import org.infinispan.protostream.annotations.ProtoField;
-
-public class ProjectEnvStatus {
-    @ProtoField(number = 1)
-    String environment;
-    @ProtoField(number = 2)
-    Status status;
-    @ProtoField(number = 3)
-    Status contextStatus;
-    @ProtoField(number = 4)
-    Status consumerStatus;
-    @ProtoField(number = 5)
-    Status routesStatus;
-    @ProtoField(number = 6)
-    Status registryStatus;
-    @ProtoField(number = 7)
-    String contextVersion;
-    @ProtoField(number = 8)
-    String lastPipelineRun;
-    @ProtoField(number = 9)
-    String lastPipelineRunResult;
-    @ProtoField(number = 10)
-    Long lastPipelineRunTime;
-    @ProtoField(number = 11)
-    DeploymentStatus deploymentStatus;
-    @ProtoField(number = 12)
-    String lastPipelineRunStartTime;
-
-    public enum Status {
-        @ProtoEnumValue(number = 0, name = "DOWN")
-        DOWN,
-        @ProtoEnumValue(number = 1, name = "UP")
-        UP,
-        @ProtoEnumValue(number = 2, name = "NA")
-        NA
-    }
-
-    @ProtoFactory
-    public ProjectEnvStatus(String environment, Status status, Status 
contextStatus, Status consumerStatus, Status routesStatus, Status 
registryStatus, String contextVersion,
-                            String lastPipelineRun, String 
lastPipelineRunResult, Long lastPipelineRunTime, DeploymentStatus 
deploymentStatus, String lastPipelineRunStartTime) {
-        this.environment = environment;
-        this.status = status;
-        this.contextStatus = contextStatus;
-        this.consumerStatus = consumerStatus;
-        this.routesStatus = routesStatus;
-        this.registryStatus = registryStatus;
-        this.contextVersion = contextVersion;
-        this.lastPipelineRun = lastPipelineRun;
-        this.lastPipelineRunResult = lastPipelineRunResult;
-        this.lastPipelineRunTime = lastPipelineRunTime;
-        this.deploymentStatus = deploymentStatus;
-        this.lastPipelineRunStartTime = lastPipelineRunStartTime;
-    }
-
-    public ProjectEnvStatus(String environment) {
-        this.environment = environment;
-    }
-
-    public String getEnvironment() {
-        return environment;
-    }
-
-    public void setEnvironment(String environment) {
-        this.environment = environment;
-    }
-
-    public Status getStatus() {
-        return status;
-    }
-
-    public void setStatus(Status status) {
-        this.status = status;
-    }
-
-    public Status getContextStatus() {
-        return contextStatus;
-    }
-
-    public void setContextStatus(Status contextStatus) {
-        this.contextStatus = contextStatus;
-    }
-
-    public Status getConsumerStatus() {
-        return consumerStatus;
-    }
-
-    public void setConsumerStatus(Status consumerStatus) {
-        this.consumerStatus = consumerStatus;
-    }
-
-    public Status getRoutesStatus() {
-        return routesStatus;
-    }
-
-    public void setRoutesStatus(Status routesStatus) {
-        this.routesStatus = routesStatus;
-    }
-
-    public Status getRegistryStatus() {
-        return registryStatus;
-    }
-
-    public void setRegistryStatus(Status registryStatus) {
-        this.registryStatus = registryStatus;
-    }
-
-    public String getLastPipelineRun() {
-        return lastPipelineRun;
-    }
-
-    public void setLastPipelineRun(String lastPipelineRun) {
-        this.lastPipelineRun = lastPipelineRun;
-    }
-
-    public String getLastPipelineRunResult() {
-        return lastPipelineRunResult;
-    }
-
-    public void setLastPipelineRunResult(String lastPipelineRunResult) {
-        this.lastPipelineRunResult = lastPipelineRunResult;
-    }
-
-    public DeploymentStatus getDeploymentStatus() {
-        return deploymentStatus;
-    }
-
-    public void setDeploymentStatus(DeploymentStatus deploymentStatus) {
-        this.deploymentStatus = deploymentStatus;
-    }
-
-    public String getContextVersion() {
-        return contextVersion;
-    }
-
-    public void setContextVersion(String contextVersion) {
-        this.contextVersion = contextVersion;
-    }
-
-    public Long getLastPipelineRunTime() {
-        return lastPipelineRunTime;
-    }
-
-    public void setLastPipelineRunTime(Long lastPipelineRunTime) {
-        this.lastPipelineRunTime = lastPipelineRunTime;
-    }
-
-    public String getLastPipelineRunStartTime() {
-        return lastPipelineRunStartTime;
-    }
-
-    public void setLastPipelineRunStartTime(String lastPipelineRunStartTime) {
-        this.lastPipelineRunStartTime = lastPipelineRunStartTime;
-    }
-}
diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/model/ProjectStoreSchema.java
 
b/karavan-app/src/main/java/org/apache/camel/karavan/model/ProjectStoreSchema.java
index 4721887..5e8d3d5 100644
--- 
a/karavan-app/src/main/java/org/apache/camel/karavan/model/ProjectStoreSchema.java
+++ 
b/karavan-app/src/main/java/org/apache/camel/karavan/model/ProjectStoreSchema.java
@@ -5,7 +5,7 @@ import 
org.infinispan.protostream.annotations.AutoProtoSchemaBuilder;
 
 @AutoProtoSchemaBuilder(
         includeClasses = {
-                GroupedKey.class, Project.class, ProjectFile.class, 
PipelineStatus.class, ProjectEnvStatus.class, DeploymentStatus.class,
+                GroupedKey.class, Project.class, ProjectFile.class, 
PipelineStatus.class, CamelStatus.class, DeploymentStatus.class,
                 PodStatus.class
         },
         schemaPackageName = "karavan")
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 189bed0..f1c33a5 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
@@ -18,6 +18,7 @@ package org.apache.camel.karavan.service;
 
 import io.quarkus.runtime.configuration.ProfileManager;
 import io.vertx.core.eventbus.EventBus;
+import org.apache.camel.karavan.model.CamelStatus;
 import org.apache.camel.karavan.model.DeploymentStatus;
 import org.apache.camel.karavan.model.GroupedKey;
 import org.apache.camel.karavan.model.Kamelet;
@@ -57,6 +58,8 @@ public class InfinispanService {
 
     BasicCache<GroupedKey, DeploymentStatus> deploymentStatus;
 
+    BasicCache<GroupedKey, CamelStatus> camelStatus;
+
     BasicCache<String, String> kamelets;
 
     @Inject
@@ -96,6 +99,7 @@ public class InfinispanService {
             files = 
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache(ProjectFile.CACHE,
 builder.build());
             pipelineStatuses = 
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache(PipelineStatus.CACHE,
 builder.build());
             deploymentStatus = 
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache(DeploymentStatus.CACHE,
 builder.build());
+            camelStatus = 
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache(CamelStatus.CACHE,
 builder.build());
             kamelets = 
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache(Kamelet.CACHE,
 builder.build());
         } else {
             LOGGER.info("InfinispanService is starting in remote mode");
@@ -103,6 +107,7 @@ public class InfinispanService {
             files = 
cacheManager.administration().getOrCreateCache(ProjectFile.CACHE, new 
XMLStringConfiguration(String.format(CACHE_CONFIG, ProjectFile.CACHE)));
             pipelineStatuses = 
cacheManager.administration().getOrCreateCache(ProjectFile.CACHE, new 
XMLStringConfiguration(String.format(CACHE_CONFIG, PipelineStatus.CACHE)));
             deploymentStatus = 
cacheManager.administration().getOrCreateCache(ProjectFile.CACHE, new 
XMLStringConfiguration(String.format(CACHE_CONFIG, DeploymentStatus.CACHE)));
+            camelStatus = 
cacheManager.administration().getOrCreateCache(ProjectFile.CACHE, new 
XMLStringConfiguration(String.format(CACHE_CONFIG, CamelStatus.CACHE)));
             kamelets = 
cacheManager.administration().getOrCreateCache(Kamelet.CACHE, new 
XMLStringConfiguration(String.format(CACHE_CONFIG, Kamelet.CACHE)));
         }
         if (getProjects().isEmpty()) {
@@ -111,10 +116,6 @@ public class InfinispanService {
         }
 
         bus.publish(KaravanService.LOAD_CUSTOM_KAMELETS, "");
-
-        if (ProfileManager.getLaunchMode().isDevOrTest() && 
getProjects().isEmpty()){
-//            generateDevProjects();
-        }
     }
 
     public List<Project> getProjects() {
@@ -182,6 +183,14 @@ public class InfinispanService {
         deploymentStatus.put(GroupedKey.create(status.getProjectId(), 
status.getProjectId()), status);
     }
 
+    public CamelStatus getCamelStatus(String projectId) {
+        return camelStatus.get(GroupedKey.create(projectId, projectId));
+    }
+
+    public void saveCamelStatus(CamelStatus status) {
+        camelStatus.put(GroupedKey.create(status.getProjectId(), 
status.getProjectId()), status);
+    }
+
     public List<String> getKameletNames() {
         return kamelets.keySet().stream().collect(Collectors.toList());
     }
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 fa5329a..b6453e3 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
@@ -16,20 +16,22 @@
  */
 package org.apache.camel.karavan.service;
 
-import io.fabric8.tekton.pipeline.v1beta1.PipelineRun;
+import io.quarkus.runtime.configuration.ProfileManager;
 import io.quarkus.vertx.ConsumeEvent;
-import io.smallrye.mutiny.tuples.Tuple4;
 import io.vertx.core.json.JsonObject;
 import io.vertx.mutiny.core.Vertx;
+import io.vertx.mutiny.core.buffer.Buffer;
+import io.vertx.mutiny.ext.web.client.HttpResponse;
 import io.vertx.mutiny.ext.web.client.WebClient;
+import org.apache.camel.karavan.model.CamelStatus;
 import org.apache.camel.karavan.model.KaravanConfiguration;
-import org.apache.camel.karavan.model.ProjectEnvStatus;
 import org.jboss.logging.Logger;
 
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
-import java.time.Instant;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 @ApplicationScoped
 public class StatusService {
@@ -64,103 +66,55 @@ public class StatusService {
     @ConsumeEvent(value = CMD_COLLECT_STATUSES, blocking = true, ordered = 
true)
     public void collectStatuses(String projectId) throws Exception {
         if ((System.currentTimeMillis() - lastCollect) > 
configuration.statusThreshold()) {
-//            collectStatusesForProject(projectId);
+            collectStatusesForProject(projectId);
             lastCollect = System.currentTimeMillis();
         }
     }
 
-//    private void collectStatusesForProject(String projectId) {
-//        ProjectStatus old = infinispanService.getProjectStatus(projectId);
-//        ProjectStatus status = new ProjectStatus();
-//        status.setProjectId(projectId);
-//        status.setLastUpdate(System.currentTimeMillis());
-//        List<ProjectEnvStatus> statuses = new ArrayList<>(1);
-//        configuration.environments().stream().filter(e -> 
e.active()).forEach(e -> {
-//            String url = ProfileManager.getActiveProfile().equals("dev")
-//                    ? String.format("http://%s-%s.%s/q/health";, projectId, 
e.namespace(), e.cluster())
-//                    : String.format("http://%s.%s.%s/q/health";, projectId, 
e.namespace(), e.cluster());
-//            ProjectEnvStatus pes = getProjectEnvStatus(url, e.name());
-//            DeploymentStatus ds = 
kubernetesService.getDeploymentStatus(projectId, e.namespace());
-//            Tuple4<Boolean, String, String, Long> pipeline = 
getProjectPipelineStatus(projectId, e.pipeline(), e.namespace());
-//
-//            pes.setDeploymentStatus(ds);
-//
-//            if (pipeline.getItem1()){
-//                pes.setLastPipelineRun(pipeline.getItem2());
-//                pes.setLastPipelineRunResult(pipeline.getItem3());
-//                pes.setLastPipelineRunTime(pipeline.getItem4());
-//            } else if (old != null){
-//                Optional<ProjectEnvStatus> opes = 
old.getStatuses().stream().filter(x -> 
x.getEnvironment().equals(e.name())).findFirst();
-//                if (opes.isPresent()) {
-//                    pes.setLastPipelineRun(opes.get().getLastPipelineRun());
-//                    
pes.setLastPipelineRunResult(opes.get().getLastPipelineRunResult());
-//                }
-//            }
-//            statuses.add(pes);
-//        });
-//        status.setStatuses(statuses);
-//        infinispanService.saveProjectStatus(status);
-//    }
-
-    private Tuple4<Boolean, String, String, Long> 
getProjectPipelineStatus(String projectId, String pipelineName, String 
namespace) {
+    private void collectStatusesForProject(String projectId) {
+        configuration.environments().stream().filter(e -> 
e.active()).forEach(e -> {
+            String url = ProfileManager.getActiveProfile().equals("dev")
+                    ? String.format("http://%s-%s.%s/q/health";, projectId, 
e.namespace(), e.cluster())
+                    : String.format("http://%s.%s.%s/q/health";, projectId, 
e.namespace(), e.cluster());
+            CamelStatus cs = getCamelStatus(projectId, url);
+            infinispanService.saveCamelStatus(cs);
+        });
+
+    }
+
+    private CamelStatus getCamelStatus(String projectId, String url) {
+        // TODO: make it reactive
+        System.out.println(url);
         try {
-            PipelineRun pipelineRun = 
kubernetesService.getLastPipelineRun(projectId, pipelineName, namespace);
-            if (pipelineRun != null) {
-                Instant create = 
Instant.parse(pipelineRun.getMetadata().getCreationTimestamp());
-                Instant completion = 
pipelineRun.getStatus().getCompletionTime() != null
-                        ? 
Instant.parse(pipelineRun.getStatus().getCompletionTime())
-                        : Instant.now();
-
-                long duration = completion.getEpochSecond() - 
create.getEpochSecond();
-                return Tuple4.of(true, pipelineRun.getMetadata().getName(), 
pipelineRun.getStatus().getConditions().get(0).getReason(), duration);
+            HttpResponse<Buffer> result = 
getWebClient().getAbs(url).timeout(1000).send().subscribeAsCompletionStage().toCompletableFuture().get();
+            if (result.statusCode() == 200) {
+                JsonObject res = result.bodyAsJsonObject();
+                List<JsonObject> checks = 
res.getJsonArray("checks").stream().map(o -> 
(JsonObject)o).collect(Collectors.toList());
+
+                JsonObject context = checks.stream().filter(o -> 
Objects.equals(o.getString("name"), "context")).findFirst().get();
+                return new CamelStatus(
+                        projectId,
+                        getStatus(checks, "context"),
+                        getStatus(checks, "camel-consumers"),
+                        getStatus(checks, "camel-routes"),
+                        getStatus(checks, "camel-registry"),
+                        
context.getJsonObject("data").getString("context.version")
+                );
             } else {
-                return Tuple4.of(true,"","Undefined", 0L);
+                return new CamelStatus(projectId);
             }
         } catch (Exception ex) {
             LOGGER.error(ex.getMessage());
-            return Tuple4.of(false, "", "Undefined", 0L);
+            return new CamelStatus(projectId);
         }
     }
 
-//    private ProjectEnvStatus getProjectEnvStatus(String url, String env) {
-//        // TODO: make it reactive
-//        try {
-//            HttpResponse<Buffer> result = 
getWebClient().getAbs(url).timeout(1000).send().subscribeAsCompletionStage().toCompletableFuture().get();
-//            if (result.statusCode() == 200) {
-//                JsonObject res = result.bodyAsJsonObject();
-//                List<JsonObject> checks = 
res.getJsonArray("checks").stream().map(o -> 
(JsonObject)o).collect(Collectors.toList());
-//
-//                JsonObject context = checks.stream().filter(o -> 
Objects.equals(o.getString("name"), "context")).findFirst().get();
-//                return new ProjectEnvStatus(
-//                        env,
-//                        res != null && res.containsKey("status") && 
res.getString("status").equals("UP") ? ProjectEnvStatus.Status.UP : 
ProjectEnvStatus.Status.DOWN,
-//                        getStatus(checks, "context"),
-//                        getStatus(checks, "camel-consumers"),
-//                        getStatus(checks, "camel-routes"),
-//                        getStatus(checks, "camel-registry"),
-//                        
context.getJsonObject("data").getString("context.version"),
-//                "",
-//                "",
-//                0L,
-//                new DeploymentStatus()
-//                );
-//            } else {
-//                return new ProjectEnvStatus(env);
-//            }
-//        } catch (Exception ex) {
-//            LOGGER.error(ex.getMessage());
-////            ex.printStackTrace();
-//            return new ProjectEnvStatus(env);
-//        }
-//    }
-
-    private ProjectEnvStatus.Status getStatus(List<JsonObject> checks, String 
name){
+    private CamelStatus.Status getStatus(List<JsonObject> checks, String name){
         try {
             JsonObject res = checks.stream().filter(o -> 
o.getString("name").equals(name)).findFirst().get();
-            return res.getString("status").equals("UP") ? 
ProjectEnvStatus.Status.UP : ProjectEnvStatus.Status.DOWN;
+            return res.getString("status").equals("UP") ? 
CamelStatus.Status.UP : CamelStatus.Status.DOWN;
         } catch (Exception e){
-            return ProjectEnvStatus.Status.NA;
+            return CamelStatus.Status.NA;
         }
     }
-
 }
\ No newline at end of file
diff --git a/karavan-app/src/main/resources/application.properties 
b/karavan-app/src/main/resources/application.properties
index bc96a84..0889e13 100644
--- a/karavan-app/src/main/resources/application.properties
+++ b/karavan-app/src/main/resources/application.properties
@@ -17,7 +17,7 @@ karavan.config.group-id=org.camel.karavan.demo
 karavan.config.image-group=karavan
 karavan.config.runtime=QUARKUS
 karavan.config.runtime-version=2.12.2.Final
-karavan.config.status-threshold=1000
+karavan.config.status-threshold=2000
 
 karavan.config.environments[0].name=dev
 karavan.config.environments[0].namespace=karavan
diff --git a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx 
b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
index 4441d52..31d976b 100644
--- a/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
+++ b/karavan-app/src/main/webapp/src/api/KaravanApi.tsx
@@ -1,5 +1,5 @@
 import axios, {AxiosResponse} from "axios";
-import {DeploymentStatus, PipelineStatus, Project, ProjectFile} from 
"../projects/ProjectModels";
+import {CamelStatus, DeploymentStatus, PipelineStatus, Project, ProjectFile} 
from "../projects/ProjectModels";
 import {Buffer} from 'buffer';
 import {SsoApi} from "./SsoApi";
 
@@ -171,6 +171,17 @@ export class KaravanApi {
         });
     }
 
+    static async getProjectCamelStatus(projectId: string, after: (status: 
CamelStatus) => void) {
+        instance.get('/api/status/camel/' + projectId)
+            .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/projects/ProjectInfo.tsx 
b/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx
index 64e089b..8ec2cdf 100644
--- a/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx
+++ b/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx
@@ -89,6 +89,10 @@ export class ProjectInfo extends React.Component<Props, 
State> {
                 this.setState({key: Math.random().toString(), 
deploymentStatus: status});
                 // console.log(status);
             });
+            KaravanApi.getProjectCamelStatus(this.props.project.projectId, 
(status: CamelStatus) => {
+                this.setState({key: Math.random().toString(), camelStatus: 
status});
+                console.log(status);
+            });
         }
     }
 
@@ -353,7 +357,7 @@ export class ProjectInfo extends React.Component<Props, 
State> {
                                     {pipeline ? pipeline : "-"}
                                 </Button>
                             </Label>
-                            {showTime && <Label icon={<ClockIcon/>} 
color={color}>{lastPipelineRunTime + "s"}</Label>}
+                            {showTime && lastPipelineRunTime !== undefined && 
<Label icon={<ClockIcon/>} color={color}>{lastPipelineRunTime + "s"}</Label>}
                         </LabelGroup>
                     </Tooltip>
                 </FlexItem>


Reply via email to