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