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 b70b00eec1df8ad985b8a072ab005b76550c8cda
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Tue Sep 5 15:38:41 2023 -0400

    Redesign work in Docker for #817
---
 .../apache/camel/karavan/api/DevModeResource.java  |  6 ++--
 .../apache/camel/karavan/service/CamelService.java | 40 ++++++++++------------
 .../apache/camel/karavan/service/CodeService.java  | 15 ++++----
 .../camel/karavan/service/ProjectService.java      |  5 +++
 .../camel/karavan/service/ScheduledService.java    | 11 +-----
 .../apache/camel/karavan/shared/ConfigService.java | 20 ++++++++---
 .../src/main/resources/application.properties      |  2 +-
 .../webui/src/project/dashboard/InfoContainer.tsx  |  2 +-
 .../karavan/infinispan/CodeReloadListener.java     | 30 ----------------
 9 files changed, 53 insertions(+), 78 deletions(-)

diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java
index 3e2c879b..05aff589 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/api/DevModeResource.java
@@ -87,12 +87,12 @@ public class DevModeResource {
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/reload/{projectId}")
     public Response reload(@PathParam("projectId") String projectId) {
-        if (ConfigService.inKubernetes()) {
+        if (infinispanService.isReady()) {
             camelService.reloadProjectCode(projectId);
+            return Response.ok().build();
         } else {
-            infinispanService.sendCodeReloadCommand(projectId);
+            return Response.noContent().build();
         }
-        return Response.ok().build();
     }
 
     @DELETE
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 73557d4d..44783740 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
@@ -56,6 +56,9 @@ public class CamelService {
     @Inject
     KubernetesService kubernetesService;
 
+    @Inject
+    ProjectService projectService;
+
     @ConfigProperty(name = "karavan.environment")
     String environment;
 
@@ -75,26 +78,6 @@ public class CamelService {
     }
 
 
-    public void loadCodeToDevMode(String projectId) {
-        LOGGER.info("DevMode reload code " + projectId);
-        ContainerStatus status = 
infinispanService.getContainerStatus(projectId, environment, projectId);
-        CamelStatus cs = infinispanService.getCamelStatus(projectId, 
environment, CamelStatus.Name.context.name());
-        if (status != null
-                && !Objects.equals(status.getCodeLoaded(), Boolean.TRUE)
-                && status.getContainerId() != null
-                && 
status.getState().equals(ContainerStatus.State.running.name())
-                && camelIsStarted(cs)) {
-            LOGGER.info("CAMEL STARTED -> SEND RELOAD");
-            if (ConfigService.inKubernetes()) {
-                reloadProjectCode(projectId);
-            } else {
-                infinispanService.sendCodeReloadCommand(projectId);
-            }
-        } else {
-
-        }
-    }
-
     private boolean camelIsStarted(CamelStatus camelStatus) {
         try {
             String status = camelStatus.getStatus();
@@ -143,12 +126,25 @@ public class CamelService {
     }
 
     public String getContainerAddress(String containerName) {
-        return "http://"; + containerName + "." + 
kubernetesService.getNamespace() + ".svc.cluster.local";
+        if (ConfigService.inKubernetes()) {
+            return "http://"; + containerName + "." + 
kubernetesService.getNamespace() + ".svc.cluster.local";
+        } else if (ConfigService.inDocker()) {
+            Integer port = projectService.getProjectPort(containerName);
+            return "http://"; + containerName + ":" + port;
+        } else {
+            Integer port = projectService.getProjectPort(containerName);
+            return "http://localhost:"; + port;
+        }
     }
 
     public void collectCamelStatuses() {
         if (infinispanService.isReady()) {
-            infinispanService.getContainerStatuses(environment).forEach(pod -> 
{
+            infinispanService.getContainerStatuses(environment).stream()
+                    .filter(cs ->
+                            cs.getType() == 
ContainerStatus.ContainerType.project
+                            || cs.getType() == 
ContainerStatus.ContainerType.devmode
+                    ).forEach(pod -> {
+                System.out.println(pod.getProjectId());
                 CamelStatusRequest csr = new 
CamelStatusRequest(pod.getProjectId(), pod.getContainerName());
                 eventBus.publish(CMD_COLLECT_CAMEL_STATUS, 
JsonObject.mapFrom(csr));
             });
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
index 4e243bc2..e9e0893b 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/CodeService.java
@@ -292,12 +292,8 @@ public class CodeService {
         List<ProjectFile> files =  
infinispanService.getProjectFilesByName(PROJECT_COMPOSE_FILENAME).stream()
                 .filter(f -> !Objects.equals(f.getProjectId(), 
Project.Type.templates.name())).toList();
         if (!files.isEmpty()) {
-            return files.stream().map(f -> 
convertToDockerComposeService(f.getCode(), f.getProjectId()))
-                    .map(dcs -> {
-                        Optional<Integer> port = 
dcs.getPortsMap().entrySet().stream()
-                                .filter(e -> Objects.equals(e.getValue(), 
INTERNAL_PORT)).map(Map.Entry::getKey).findFirst();
-                        return port.orElse(INTERNAL_PORT);
-                    })
+            return files.stream().map(this::getProjectPort)
+                    .filter(Objects::nonNull)
                     .mapToInt(Integer::intValue)
                     .max().orElse(INTERNAL_PORT);
         } else {
@@ -305,6 +301,13 @@ public class CodeService {
         }
     }
 
+    public Integer getProjectPort(ProjectFile composeFile) {
+        DockerComposeService dcs = 
convertToDockerComposeService(composeFile.getCode(), 
composeFile.getProjectId());
+        Optional<Integer> port = dcs.getPortsMap().entrySet().stream()
+                .filter(e -> Objects.equals(e.getValue(), 
INTERNAL_PORT)).map(Map.Entry::getKey).findFirst();
+        return port.orElse(null);
+    }
+
 
     public DockerComposeService getInternalDockerComposeService (String name) {
         String composeText = getResourceFile("/services/internal.yaml");
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
index 1ec31c08..009e6ee8 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
@@ -138,6 +138,11 @@ public class ProjectService implements HealthCheck{
         return project;
     }
 
+    public Integer getProjectPort(String projectId) {
+        ProjectFile composeFile = infinispanService.getProjectFile(projectId, 
PROJECT_COMPOSE_FILENAME);
+        return codeService.getProjectPort(composeFile);
+    }
+
     public void pullCommits() {
         if (readyToPull.get()) {
             LOGGER.info("Pull commits...");
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ScheduledService.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ScheduledService.java
index d4dad13a..b026d21d 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ScheduledService.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ScheduledService.java
@@ -80,20 +80,11 @@ public class ScheduledService {
         }
     }
 
-//    @Scheduled(every = "{karavan.container.infinispan.interval}", 
concurrentExecution = Scheduled.ConcurrentExecution.SKIP)
-//    void checkInfinispanHealth() {
-//        if (!infinispanService.isReady()) {
-//            dockerForInfinispan.checkInfinispanHealth();
-//        }
-//    }
 
     @Scheduled(every = "{karavan.camel.status.interval}", concurrentExecution 
= Scheduled.ConcurrentExecution.SKIP)
     void collectCamelStatuses() {
         LOGGER.info("Collect info statuses");
-        if (ConfigService.inKubernetes()) {
-            // collect Camel statuses
-            camelService.collectCamelStatuses();
-        }
+        camelService.collectCamelStatuses();
     }
 
     @Scheduled(every = "{karavan.git-pull-interval}", concurrentExecution = 
Scheduled.ConcurrentExecution.SKIP)
diff --git 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/ConfigService.java
 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/ConfigService.java
index 6aa3591b..392da8a6 100644
--- 
a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/ConfigService.java
+++ 
b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/ConfigService.java
@@ -19,18 +19,20 @@ package org.apache.camel.karavan.shared;
 import io.quarkus.runtime.StartupEvent;
 import io.quarkus.runtime.configuration.ConfigUtils;
 import io.quarkus.runtime.configuration.ProfileManager;
+import io.vertx.core.Vertx;
+import jakarta.inject.Inject;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
 
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.enterprise.event.Observes;
+
+import java.nio.file.Paths;
 import java.util.List;
 import java.util.Objects;
 
 @ApplicationScoped
 public class ConfigService {
 
-    public static final String HEADLESS_MODE = "headless";
-
     @ConfigProperty(name = "karavan.version")
     String version;
 
@@ -47,6 +49,8 @@ public class ConfigService {
     List<String> runtimes;
 
     private Configuration configuration;
+    private static Boolean inKubernetes;
+    private static Boolean inDocker;
 
     void onStart(@Observes StartupEvent ev) {
         configuration = new Configuration(
@@ -64,11 +68,17 @@ public class ConfigService {
     }
 
     public static boolean inKubernetes() {
-        return Objects.nonNull(System.getenv("KUBERNETES_SERVICE_HOST"));
+        if (inKubernetes == null) {
+            inKubernetes = 
Objects.nonNull(System.getenv("KUBERNETES_SERVICE_HOST"));
+        }
+        return inKubernetes;
     }
 
-    public static boolean isHeadless() {
-        return ConfigUtils.isProfileActive(HEADLESS_MODE);
+    public static boolean inDocker() {
+        if (inDocker == null) {
+            inDocker = Vertx.vertx().fileSystem().existsBlocking(".dockerenv");
+        }
+        return inDocker;
     }
 
     public static boolean isDevOrTest() {
diff --git a/karavan-web/karavan-app/src/main/resources/application.properties 
b/karavan-web/karavan-app/src/main/resources/application.properties
index 79e37e0a..d666d97c 100644
--- a/karavan-web/karavan-app/src/main/resources/application.properties
+++ b/karavan-web/karavan-app/src/main/resources/application.properties
@@ -3,7 +3,7 @@ karavan.environment=dev
 karavan.environments=dev
 karavan.default-runtime=camel-main
 karavan.runtimes=camel-main,quarkus,spring-boot
-karavan.camel.status.interval=off
+karavan.camel.status.interval=3s
 karavan.container.status.interval=3s
 karavan.container.infinispan.interval=5s
 karavan.devmode.image=ghcr.io/apache/camel-karavan-devmode:4.0.0-RC2
diff --git 
a/karavan-web/karavan-app/src/main/webui/src/project/dashboard/InfoContainer.tsx
 
b/karavan-web/karavan-app/src/main/webui/src/project/dashboard/InfoContainer.tsx
index 1b37998f..7b498737 100644
--- 
a/karavan-web/karavan-app/src/main/webui/src/project/dashboard/InfoContainer.tsx
+++ 
b/karavan-web/karavan-app/src/main/webui/src/project/dashboard/InfoContainer.tsx
@@ -42,7 +42,7 @@ export function InfoContainer (props: Props) {
     return (
         <DescriptionList isHorizontal>
             <DescriptionListGroup>
-                <DescriptionListTerm>Pod</DescriptionListTerm>
+                <DescriptionListTerm>Container</DescriptionListTerm>
                 <DescriptionListDescription>
                     {getPodInfoLabel(containerStatus.containerName)}
                 </DescriptionListDescription>
diff --git 
a/karavan-web/karavan-infinispan/src/main/java/org/apache/camel/karavan/infinispan/CodeReloadListener.java
 
b/karavan-web/karavan-infinispan/src/main/java/org/apache/camel/karavan/infinispan/CodeReloadListener.java
deleted file mode 100644
index 8c369157..00000000
--- 
a/karavan-web/karavan-infinispan/src/main/java/org/apache/camel/karavan/infinispan/CodeReloadListener.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.apache.camel.karavan.infinispan;
-
-import io.vertx.core.eventbus.EventBus;
-import io.vertx.core.json.JsonObject;
-import org.apache.camel.karavan.infinispan.model.GroupedKey;
-import org.infinispan.client.hotrod.annotation.ClientCacheEntryCreated;
-import org.infinispan.client.hotrod.annotation.ClientCacheEntryModified;
-import org.infinispan.client.hotrod.annotation.ClientListener;
-import org.infinispan.client.hotrod.event.ClientCacheEntryCreatedEvent;
-import org.infinispan.client.hotrod.event.ClientCacheEntryModifiedEvent;
-
-@ClientListener
-public class CodeReloadListener {
-    private final EventBus eventBus;
-
-    public CodeReloadListener(EventBus eventBus) {
-        this.eventBus = eventBus;
-    }
-
-    @ClientCacheEntryCreated
-    public void entryCreated(ClientCacheEntryCreatedEvent<GroupedKey> event) {
-        eventBus.publish(InfinispanService.CODE_RELOAD_COMMAND_INTERNAL, 
JsonObject.mapFrom(event.getKey()));
-    }
-
-    @ClientCacheEntryModified
-    public void entryModified(ClientCacheEntryModifiedEvent<GroupedKey> event) 
{
-        eventBus.publish(InfinispanService.CODE_RELOAD_COMMAND_INTERNAL, 
JsonObject.mapFrom(event.getKey()));
-    }
-
-}
\ No newline at end of file

Reply via email to