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