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 2022/12/19 14:39:36 UTC

[camel-karavan] branch main updated: Status collect for spring-boot app

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 03d9f11  Status collect for spring-boot app
03d9f11 is described below

commit 03d9f1124f909b4188f3605ce62ef5821d7a6791
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Mon Dec 19 09:39:28 2022 -0500

    Status collect for spring-boot app
---
 .../camel/karavan/service/StatusService.java       | 65 ++++++++++++++++------
 1 file changed, 49 insertions(+), 16 deletions(-)

diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java
index e6fae3d..eddd28f 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/StatusService.java
@@ -36,6 +36,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 @ApplicationScoped
@@ -105,11 +106,12 @@ public class StatusService {
     private void collectStatusesForProject(String projectId) {
         LOGGER.info("Collect Camel status for project " + projectId);
         Project project = infinispanService.getProject(projectId);
-        String path = project.getRuntime().equalsIgnoreCase("quarkus") ? "/q/health" : "/actuator/health";
+        String runtime = project.getRuntime();
+        String path = runtime.equalsIgnoreCase("quarkus") ? "/q/health" : "/actuator/health";
         String separator = ProfileManager.getActiveProfile().equals("dev") ? "-" : ".";
         String cluster = ProfileManager.getActiveProfile().equals("dev") ? kubernetesService.getCluster() : "svc.cluster.local";
         String url = "http://" + projectId + separator + kubernetesService.getNamespace() + "." + cluster + path;
-        CamelStatus cs = getCamelStatus(projectId, url);
+        CamelStatus cs = getCamelStatus(projectId, url, runtime);
         try {
             String data = mapper.writeValueAsString(cs);
             eventBus.send(CMD_SAVE_STATUS, data);
@@ -118,24 +120,40 @@ public class StatusService {
         }
     }
 
-    private CamelStatus getCamelStatus(String projectId, String url) {
+    private CamelStatus getCamelStatus(String projectId, String url, String runtime) {
         // TODO: make it reactive
         try {
             HttpResponse<Buffer> result = getWebClient().getAbs(url).timeout(1000).send().subscribeAsCompletionStage().toCompletableFuture().get();
             if (result.statusCode() == 200) {
                 JsonObject res = result.bodyAsJsonObject();
-                List<JsonObject> checks = res.getJsonArray("checks").stream().map(o -> (JsonObject)o).collect(Collectors.toList());
-
-                JsonObject context = checks.stream().filter(o -> Objects.equals(o.getString("name"), "context")).findFirst().get();
-                return new CamelStatus(
-                        projectId,
-                        getStatus(checks, "context"),
-                        getStatus(checks, "camel-consumers"),
-                        getStatus(checks, "camel-routes"),
-                        getStatus(checks, "camel-registry"),
-                        context.getJsonObject("data").getString("context.version"),
-                        environment
-                );
+                if (runtime.equalsIgnoreCase("quarkus")) {
+                    List<JsonObject> checks = res.getJsonArray("checks").stream().map(o -> (JsonObject) o).collect(Collectors.toList());
+
+                    JsonObject context = checks.stream().filter(o -> Objects.equals(o.getString("name"), "context")).findFirst().get();
+                    return new CamelStatus(
+                            projectId,
+                            getQuarkusStatus(checks, "context"),
+                            getQuarkusStatus(checks, "camel-consumers"),
+                            getQuarkusStatus(checks, "camel-routes"),
+                            getQuarkusStatus(checks, "camel-registry"),
+                            context.getJsonObject("data").getString("context.version"),
+                            environment
+                    );
+                } else {
+                    JsonObject components = res.getJsonObject("components");
+                    JsonObject camelHealth = components.getJsonObject("camelHealth");
+                    JsonObject details = camelHealth.getJsonObject("details");
+
+                    return new CamelStatus(
+                            projectId,
+                            getSpringStatus(details, "context"),
+                            getSpringStatus(details, "consumer"),
+                            getSpringStatus(details, "route"),
+                            CamelStatus.Status.UNDEFINED,
+                            "N/A in SpringBoot",
+                            environment
+                    );
+                }
             } else {
                 return new CamelStatus(projectId, environment);
             }
@@ -145,7 +163,22 @@ public class StatusService {
         }
     }
 
-    private CamelStatus.Status getStatus(List<JsonObject> checks, String name){
+    private CamelStatus.Status getSpringStatus(JsonObject object, String name){
+        try {
+            String res = object.getString("name");
+            if (res == null) {
+                Optional<String> fname = object.fieldNames().stream().filter(fn -> fn.startsWith(name)).findFirst();
+                if (fname.isPresent()) {
+                    res = object.getString(fname.get());
+                }
+            }
+            return res.equals("UP") ? CamelStatus.Status.UP : CamelStatus.Status.DOWN;
+        } catch (Exception e){
+            return CamelStatus.Status.UNDEFINED;
+        }
+    }
+
+    private CamelStatus.Status getQuarkusStatus(List<JsonObject> checks, String name){
         try {
             JsonObject res = checks.stream().filter(o -> o.getString("name").equals(name)).findFirst().get();
             return res.getString("status").equals("UP") ? CamelStatus.Status.UP : CamelStatus.Status.DOWN;