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 2023/11/08 19:28:53 UTC

(camel-karavan) branch main updated: Container status labels improvements

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 2eec97e3 Container status labels improvements
2eec97e3 is described below

commit 2eec97e3e07e29b757aa7c511396a4f4d5c37337
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Wed Nov 8 14:28:36 2023 -0500

    Container status labels improvements
---
 .../camel/karavan/docker/DockerForKaravan.java     |  5 ++++-
 .../camel/karavan/docker/DockerServiceUtils.java   |  6 +++---
 .../karavan/infinispan/model/ContainerStatus.java  | 24 ++++++++++++++++------
 .../camel/karavan/infinispan/model/Project.java    |  2 +-
 .../apache/camel/karavan/service/CamelService.java |  4 +++-
 .../karavan/service/ContainerStatusService.java    | 17 +++++++++++++--
 .../org/apache/camel/karavan/shared/Constants.java | 17 +++++++++++++++
 7 files changed, 61 insertions(+), 14 deletions(-)

diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
index 1e643185..5808c119 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerForKaravan.java
@@ -70,7 +70,10 @@ public class DockerForKaravan {
 
         return dockerService.createContainer(projectId, devmodeImage,
                 env, ports, healthCheck,
-                Map.of(LABEL_TYPE, ContainerStatus.ContainerType.devmode.name(), LABEL_PROJECT_ID, projectId),
+                Map.of(LABEL_TYPE, ContainerStatus.ContainerType.devmode.name(),
+                        LABEL_PROJECT_ID, projectId,
+                        LABEL_CAMEL_RUNTIME, CamelRuntime.CAMEL_MAIN.getValue()
+                ),
                 volumes, null, RestartPolicy.noRestart());
 
     }
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerServiceUtils.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerServiceUtils.java
index 8224d264..f436b5a8 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerServiceUtils.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerServiceUtils.java
@@ -33,8 +33,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
-import static org.apache.camel.karavan.shared.Constants.LABEL_PROJECT_ID;
-import static org.apache.camel.karavan.shared.Constants.LABEL_TYPE;
+import static org.apache.camel.karavan.shared.Constants.*;
 
 public class DockerServiceUtils {
 
@@ -50,7 +49,8 @@ public class DockerServiceUtils {
         ContainerStatus.ContainerType type = getContainerType(container.getLabels());
         String created = Instant.ofEpochSecond(container.getCreated()).toString();
         String projectId = container.getLabels().getOrDefault(LABEL_PROJECT_ID, name);
-        return ContainerStatus.createWithId(projectId, name, environment, container.getId(), container.getImage(), ports, type, commands, container.getState(), created);
+        String camelRuntime = container.getLabels().getOrDefault(LABEL_CAMEL_RUNTIME, "");
+        return ContainerStatus.createWithId(projectId, name, environment, container.getId(), container.getImage(), ports, type, commands, container.getState(), created, camelRuntime);
     }
 
     protected void updateStatistics(ContainerStatus containerStatus, Statistics stats) {
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/ContainerStatus.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/ContainerStatus.java
index 89e568ca..b6a4394d 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/ContainerStatus.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/ContainerStatus.java
@@ -89,9 +89,11 @@ public class ContainerStatus {
     String initDate;
     @ProtoField(number = 18)
     String podIP;
+    @ProtoField(number = 19)
+    String camelRuntime;
 
     @ProtoFactory
-    public ContainerStatus(String projectId, String containerName, String containerId, String image, List<Integer> ports, String env, ContainerType type, String memoryInfo, String cpuInfo, String created, String finished, List<Command> commands, String state, String phase, Boolean codeLoaded, Boolean inTransit, String initDate, String podIP) {
+    public ContainerStatus(String projectId, String containerName, String containerId, String image, List<Integer> ports, String env, ContainerType type, String memoryInfo, String cpuInfo, String created, String finished, List<Command> commands, String state, String phase, Boolean codeLoaded, Boolean inTransit, String initDate, String podIP, String camelRuntime) {
         this.projectId = projectId;
         this.containerName = containerName;
         this.containerId = containerId;
@@ -110,6 +112,7 @@ public class ContainerStatus {
         this.inTransit = inTransit;
         this.initDate = initDate;
         this.podIP = podIP;
+        this.camelRuntime = camelRuntime;
     }
 
     public ContainerStatus(String projectId, String containerName, String containerId, String image, List<Integer> ports, String env, ContainerType type, String memoryInfo, String cpuInfo, String created, String finished, List<Command> commands, String state, String phase, Boolean codeLoaded, Boolean inTransit, String initDate) {
@@ -132,7 +135,7 @@ public class ContainerStatus {
         this.initDate = initDate;
     }
 
-    public ContainerStatus(String projectId, String containerName, String containerId, String image, List<Integer> ports, String env, ContainerType type, String memoryInfo, String cpuInfo, String created, String finished, List<Command> commands, String state, Boolean codeLoaded, Boolean inTransit) {
+    public ContainerStatus(String projectId, String containerName, String containerId, String image, List<Integer> ports, String env, ContainerType type, String memoryInfo, String cpuInfo, String created, String finished, List<Command> commands, String state, Boolean codeLoaded, Boolean inTransit, String camelRuntime) {
         this.projectId = projectId;
         this.containerName = containerName;
         this.containerId = containerId;
@@ -147,6 +150,7 @@ public class ContainerStatus {
         this.commands = commands;
         this.state = state;
         this.codeLoaded = codeLoaded;
+        this.camelRuntime = camelRuntime;
         this.inTransit = inTransit;
         this.initDate = Instant.now().toString();
     }
@@ -174,16 +178,16 @@ public class ContainerStatus {
     }
 
     public static ContainerStatus createDevMode(String projectId, String env) {
-        return new ContainerStatus(projectId, projectId, null, null, null, env, ContainerType.devmode, null, null, null, null, List.of(Command.run), null, false, false);
+        return new ContainerStatus(projectId, projectId, null, null, null, env, ContainerType.devmode, null, null, null, null, List.of(Command.run), null, false, false, "");
     }
 
     public static ContainerStatus createByType(String name, String env, ContainerType type) {
-        return new ContainerStatus(name, name, null, null, null, env, type, null, null, null, null, List.of(Command.run), null, false, false);
+        return new ContainerStatus(name, name, null, null, null, env, type, null, null, null, null, List.of(Command.run), null, false, false, "");
     }
 
-    public static ContainerStatus createWithId(String projectId, String containerName, String env, String containerId, String image, List<Integer> ports, ContainerType type, List<Command> commands, String status, String created) {
+    public static ContainerStatus createWithId(String projectId, String containerName, String env, String containerId, String image, List<Integer> ports, ContainerType type, List<Command> commands, String status, String created, String camelRuntime) {
         return new ContainerStatus(projectId, containerName, containerId, image, ports, env, type,
-                null, null, created, null,  commands, status, false, false);
+                null, null, created, null,  commands, status, false, false, camelRuntime);
     }
 
     public ContainerStatus() {
@@ -333,6 +337,14 @@ public class ContainerStatus {
         this.phase = phase;
     }
 
+    public String getCamelRuntime() {
+        return camelRuntime;
+    }
+
+    public void setCamelRuntime(String camelRuntime) {
+        this.camelRuntime = camelRuntime;
+    }
+
     @Override
     public String toString() {
         return "ContainerStatus{" +
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java
index 95bb143c..562b8b30 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/infinispan/model/Project.java
@@ -66,7 +66,7 @@ public class Project {
         this.type = Type.normal;
     }
 
-    public Project(String projectId, String name, String description, String runtime) {
+    public Project(String projectId, String name, String description) {
         this.projectId = projectId;
         this.name = name;
         this.description = description;
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java
index 9a1ce605..a945bcc0 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CamelService.java
@@ -30,6 +30,7 @@ import org.apache.camel.karavan.infinispan.model.CamelStatus;
 import org.apache.camel.karavan.infinispan.model.CamelStatusValue;
 import org.apache.camel.karavan.infinispan.model.ContainerStatus;
 import org.apache.camel.karavan.kubernetes.KubernetesService;
+import org.apache.camel.karavan.shared.Constants;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
 import org.eclipse.microprofile.faulttolerance.CircuitBreaker;
 import org.jboss.logging.Logger;
@@ -84,7 +85,8 @@ public class CamelService {
                     .filter(cs ->
                             cs.getType() == ContainerStatus.ContainerType.project
                                     || cs.getType() == ContainerStatus.ContainerType.devmode
-                    ).forEach(cs -> {
+                    ).filter(cs -> Objects.equals(cs.getCamelRuntime(), Constants.CamelRuntime.CAMEL_MAIN.getValue()))
+                    .forEach(cs -> {
                         CamelStatusRequest csr = new CamelStatusRequest(cs.getProjectId(), cs.getContainerName());
                         eventBus.publish(CMD_COLLECT_CAMEL_STATUS,
                                 JsonObject.mapFrom(Map.of("containerStatus", cs, "camelStatusRequest", csr))
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ContainerStatusService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ContainerStatusService.java
index d0908920..b9cca03c 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ContainerStatusService.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ContainerStatusService.java
@@ -26,6 +26,7 @@ import jakarta.inject.Inject;
 import org.apache.camel.karavan.docker.DockerService;
 import org.apache.camel.karavan.infinispan.InfinispanService;
 import org.apache.camel.karavan.infinispan.model.ContainerStatus;
+import org.apache.camel.karavan.infinispan.model.Project;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
 import org.jboss.logging.Logger;
 
@@ -34,8 +35,6 @@ import java.time.temporal.ChronoUnit;
 import java.util.List;
 import java.util.Objects;
 
-import static org.apache.camel.karavan.service.CamelService.RELOAD_PROJECT_CODE;
-
 @ApplicationScoped
 public class ContainerStatusService {
 
@@ -115,6 +114,20 @@ public class ContainerStatusService {
         }
     }
 
+    @ConsumeEvent(value = CONTAINER_STATUS, blocking = true, ordered = true)
+    public void checkProjectExists(JsonObject data) {
+        if (infinispanService.isReady()) {
+            ContainerStatus status = data.mapTo(ContainerStatus.class);
+            if (status.getType().equals(ContainerStatus.ContainerType.project)) {
+                Project project = infinispanService.getProject(status.getProjectId());
+                if (project == null) {
+                    project = new Project(status.getProjectId(), status.getProjectId(), status.getProjectId());
+                    infinispanService.saveProject(project);
+                }
+            }
+        }
+    }
+
     private void saveContainerStatus(ContainerStatus newStatus, ContainerStatus oldStatus) {
         if (Objects.equals("exited", newStatus.getState()) || Objects.equals("dead", newStatus.getState())) {
             if (Objects.isNull(oldStatus.getFinished())) {
diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java
index 4cf59d2e..8b633ed0 100644
--- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java
+++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/Constants.java
@@ -23,6 +23,7 @@ public class Constants {
     public static final String LABEL_PART_OF = "app.kubernetes.io/part-of";
     public static final String LABEL_TYPE = "org.apache.camel.karavan/type";
     public static final String LABEL_PROJECT_ID = "org.apache.camel.karavan/projectId";
+    public static final String LABEL_CAMEL_RUNTIME = "org.apache.camel.karavan/runtime";
     public static final String LABEL_TAG = "org.apache.camel.karavan/tag";
 
     public static final String BUILDER_SUFFIX = "-builder";
@@ -35,4 +36,20 @@ public class Constants {
     public static final String M2_CACHE_SUFFIX = "m2-cache";
     public static final String PVC_MAVEN_SETTINGS = "maven-settings";
 
+    public enum CamelRuntime {
+        CAMEL_MAIN("camel-main"),
+        QUARKUS("quarkus"),
+        SPRING_BOOT("spring-boot");
+
+        private final String value;
+
+        public String getValue() {
+            return value;
+        }
+
+        CamelRuntime(String value) {
+            this.value = value;
+        }
+    }
+
 }