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 b85a3707765208b74246a76c498707f9801c3807
Author: Marat Gubaidullin <marat.gubaidul...@gmail.com>
AuthorDate: Thu May 11 11:27:23 2023 -0400

    Fixing issues for prototype #757
---
 .../apache/camel/karavan/api/RunnerResource.java   | 19 ++++++++++++++++++
 .../camel/karavan/handler/PodEventHandler.java     |  2 +-
 .../camel/karavan/service/InfinispanService.java   | 21 ++++++++++++++++++--
 .../camel/karavan/service/KubernetesService.java   |  7 ++++---
 .../camel/karavan/service/RunnerStatusService.java | 23 ++++++++++++++--------
 5 files changed, 58 insertions(+), 14 deletions(-)

diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/api/RunnerResource.java 
b/karavan-app/src/main/java/org/apache/camel/karavan/api/RunnerResource.java
index 90027649..6aaeda5d 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/api/RunnerResource.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/RunnerResource.java
@@ -16,18 +16,24 @@
  */
 package org.apache.camel.karavan.api;
 
+import io.vertx.core.json.JsonObject;
+import org.apache.camel.karavan.model.CamelStatus;
 import org.apache.camel.karavan.model.PodStatus;
 import org.apache.camel.karavan.model.Project;
 import org.apache.camel.karavan.service.InfinispanService;
 import org.apache.camel.karavan.service.KubernetesService;
+import org.apache.camel.karavan.service.StatusService;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
 
 import javax.inject.Inject;
 import javax.ws.rs.*;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import java.util.Map;
 import java.util.Optional;
 
+import static org.apache.camel.karavan.service.KubernetesService.RUNNER_SUFFIX;
+
 @Path("/api/runner")
 public class RunnerResource {
 
@@ -70,4 +76,17 @@ public class RunnerResource {
             return Response.noContent().build();
         }
     }
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("/{projectId}")
+    public Response getCamelStatusByProjectAndEnv(@PathParam("projectId") 
String projectId) {
+        String name = projectId + "-" + RUNNER_SUFFIX;
+        String status = infinispanService.geRunnerStatus(name);
+        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/handler/PodEventHandler.java
 
b/karavan-app/src/main/java/org/apache/camel/karavan/handler/PodEventHandler.java
index 8853655f..a6ffb0e0 100644
--- 
a/karavan-app/src/main/java/org/apache/camel/karavan/handler/PodEventHandler.java
+++ 
b/karavan-app/src/main/java/org/apache/camel/karavan/handler/PodEventHandler.java
@@ -50,7 +50,7 @@ public class PodEventHandler implements 
ResourceEventHandler<Pod> {
         try {
             LOGGER.info("onDelete " + pod.getMetadata().getName());
             String deployment = pod.getMetadata().getLabels().get("app");
-            String project = deployment != null ? deployment : 
pod.getMetadata().getLabels().get("project");
+            String project = deployment != null ? deployment : 
pod.getMetadata().getLabels().get("karavan/projectId");
             PodStatus ps = new PodStatus(
                     pod.getMetadata().getName(),
                     project,
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 4c3dda1c..48eb0a1f 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
@@ -71,6 +71,7 @@ public class InfinispanService implements HealthCheck  {
     private BasicCache<GroupedKey, ServiceStatus> serviceStatuses;
     private BasicCache<String, Environment> environments;
     private BasicCache<String, String> commits;
+    private BasicCache<String, String> runnerStatuses;
     private final AtomicBoolean ready = new AtomicBoolean(false);
 
     @Inject
@@ -108,6 +109,7 @@ public class InfinispanService implements HealthCheck  {
             serviceStatuses = 
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache(ServiceStatus.CACHE,
 builder.build());
             camelStatuses = 
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache(CamelStatus.CACHE,
 builder.build());
             commits = 
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache("commits",
 builder.build());
+            runnerStatuses = 
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache("runner_statuses",
 builder.build());
             cleanData();
         } else {
             LOGGER.info("InfinispanService is starting in remote mode");
@@ -120,6 +122,7 @@ public class InfinispanService implements HealthCheck  {
             serviceStatuses = 
cacheManager.administration().getOrCreateCache(ServiceStatus.CACHE, new 
StringConfiguration(String.format(CACHE_CONFIG, ServiceStatus.CACHE)));
             camelStatuses = 
cacheManager.administration().getOrCreateCache(CamelStatus.CACHE, new 
StringConfiguration(String.format(CACHE_CONFIG, CamelStatus.CACHE)));
             commits = 
cacheManager.administration().getOrCreateCache("commits", new 
StringConfiguration(String.format(CACHE_CONFIG, "commits")));
+            runnerStatuses = 
cacheManager.administration().getOrCreateCache("runner_statuses", new 
StringConfiguration(String.format(CACHE_CONFIG, "runner_statuses")));
         }
         System.out.println("READY");
         ready.set(true);
@@ -309,6 +312,7 @@ public class InfinispanService implements HealthCheck  {
                     .execute().list();
         }
     }
+
     public void saveCamelStatus(CamelStatus status) {
         camelStatuses.put(GroupedKey.create(status.getProjectId(), 
status.getEnv()), status);
     }
@@ -317,8 +321,20 @@ public class InfinispanService implements HealthCheck  {
         camelStatuses.remove(GroupedKey.create(name, env));
     }
 
+    public String geRunnerStatus(String podName) {
+        return runnerStatuses.get(podName);
+    }
+
+    public void saveRunnerStatus(String podName, String status) {
+        runnerStatuses.put(podName, status);
+    }
+
+    public void deleteRunnerStatus(String podName) {
+        runnerStatuses.remove(podName);
+    }
+
     public List<Environment> getEnvironments() {
-        return environments.values().stream().collect(Collectors.toList());
+        return new ArrayList<>(environments.values());
     }
 
     public void saveEnvironment(Environment environment) {
@@ -363,7 +379,8 @@ public class InfinispanService implements HealthCheck  {
             deploymentStatuses.clearAsync(),
             podStatuses.clearAsync(),
             pipelineStatuses.clearAsync(),
-            camelStatuses.clearAsync()
+            camelStatuses.clearAsync(),
+            runnerStatuses.clearAsync()
         ).join();
     }
 }
diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
 
b/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
index 006e5563..9ddfde35 100644
--- 
a/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
+++ 
b/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
@@ -451,9 +451,10 @@ public class KubernetesService implements HealthCheck{
         PodSpec spec = new PodSpecBuilder()
                 .withTerminationGracePeriodSeconds(0L)
                 .withContainers(container)
-                .withVolumes(new VolumeBuilder().withName(name + "-" + 
JBANG_CACHE_SUFFIX)
-                        .withNewPersistentVolumeClaim(name + "-" + 
JBANG_CACHE_SUFFIX, false).build())
-                .withVolumes(new VolumeBuilder().withName(name + "-" + 
M2_CACHE_SUFFIX)
+                .withVolumes(
+                        new VolumeBuilder().withName(name + "-" + 
JBANG_CACHE_SUFFIX)
+                        .withNewPersistentVolumeClaim(name + "-" + 
JBANG_CACHE_SUFFIX, false).build(),
+                        new VolumeBuilder().withName(name + "-" + 
M2_CACHE_SUFFIX)
                         .withNewPersistentVolumeClaim(name + "-" + 
M2_CACHE_SUFFIX, false).build())
                 .build();
 
diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/service/RunnerStatusService.java
 
b/karavan-app/src/main/java/org/apache/camel/karavan/service/RunnerStatusService.java
index e8c7bb1f..8ae0ecee 100644
--- 
a/karavan-app/src/main/java/org/apache/camel/karavan/service/RunnerStatusService.java
+++ 
b/karavan-app/src/main/java/org/apache/camel/karavan/service/RunnerStatusService.java
@@ -76,17 +76,24 @@ public class RunnerStatusService {
     @ConsumeEvent(value = CMD_COLLECT_RUNNER_STATUS, blocking = true, ordered 
= false)
     public void collectRunnerStatuses(String podName) throws 
ExecutionException, InterruptedException {
         String url = "http://"; + podName + "." + 
kubernetesService.getNamespace() + ".svc.cluster.local/q/dev";
-        HttpResponse<Buffer> result = bufferResult(url, 100);
-        System.out.println(result);
+        String result = result(url, 100);
+        if (result != null) {
+            infinispanService.saveRunnerStatus(podName, result);
+        }
     }
 
     @CircuitBreaker(requestVolumeThreshold = 10, failureRatio = 0.5, delay = 
1000)
-    public HttpResponse<Buffer> bufferResult(String url, int timeout) throws 
InterruptedException, ExecutionException {
-        HttpResponse<Buffer> result = 
getWebClient().getAbs(url).putHeader("Accept", "application/json")
-                
.timeout(timeout).send().subscribeAsCompletionStage().toCompletableFuture().get();
-        if (result.statusCode() == 200) {
-            JsonObject res = result.bodyAsJsonObject();
+    public String result(String url, int timeout) throws InterruptedException, 
ExecutionException {
+        try {
+            HttpResponse<Buffer> result = 
getWebClient().getAbs(url).putHeader("Accept", "application/json")
+                    
.timeout(timeout).send().subscribeAsCompletionStage().toCompletableFuture().get();
+            if (result.statusCode() == 200) {
+                JsonObject res = result.bodyAsJsonObject();
+                return res.encodePrettily();
+            }
+        } catch (Exception e) {
+            LOGGER.info(e.getMessage());
         }
-        return result;
+        return null;
     }
 }
\ No newline at end of file

Reply via email to