This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 369572877d3 CAMEL-18425: camel-cli - Make regular Camel applications 
work with Camel CLI
369572877d3 is described below

commit 369572877d3b65547da6de9dda126d06ab0341a3
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Aug 26 14:40:47 2022 +0200

    CAMEL-18425: camel-cli - Make regular Camel applications work with Camel CLI
---
 .../java/org/apache/camel/ExtendedCamelContext.java |  6 ++++++
 .../camel/impl/engine/AbstractCamelContext.java     |  5 +++++
 .../camel/impl/console/ContextDevConsole.java       |  2 ++
 .../camel/impl/lw/LightweightCamelContext.java      |  5 +++++
 .../impl/lw/LightweightRuntimeCamelContext.java     |  5 +++++
 .../camel/impl/health/ContextHealthCheck.java       |  2 ++
 .../core/commands/process/CamelContextStatus.java   | 19 +++++++++++++++----
 .../core/commands/process/CamelRouteStatus.java     |  4 ++--
 .../jbang/core/commands/process/ListProcess.java    |  4 ++--
 .../core/commands/process/ProcessBaseCommand.java   | 21 ++++++++++++++++-----
 10 files changed, 60 insertions(+), 13 deletions(-)

diff --git 
a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java 
b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
index bcbec2d9f94..353e5b69c88 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -877,4 +877,10 @@ public interface ExtendedCamelContext extends CamelContext 
{
      */
     void setModelineFactory(ModelineFactory modelineFactory);
 
+    /**
+     * The {@link CamelContext} have additional phases that are not defined in 
{@link ServiceStatus}
+     * and this method provides the phase ordinal value.
+     */
+    byte getStatusPhase();
+
 }
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index af9ddcdf0f7..93ee4bf669a 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -454,6 +454,11 @@ public abstract class AbstractCamelContext extends 
BaseService
         return this;
     }
 
+    @Override
+    public byte getStatusPhase() {
+        return status;
+    }
+
     /**
      * Whether to eager create {@link TypeConverter} during initialization of 
CamelContext. This is enabled by default
      * to optimize camel-core.
diff --git 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java
 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java
index 266e4c8ed7b..8c5e7bcbc13 100644
--- 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java
+++ 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/ContextDevConsole.java
@@ -20,6 +20,7 @@ import java.util.Date;
 import java.util.Locale;
 import java.util.Map;
 
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.api.management.ManagedCamelContext;
 import org.apache.camel.api.management.mbean.ManagedCamelContextMBean;
 import org.apache.camel.spi.annotations.DevConsole;
@@ -66,6 +67,7 @@ public class ContextDevConsole extends AbstractDevConsole {
         root.put("name", getCamelContext().getName());
         root.put("version", getCamelContext().getVersion());
         root.put("state", getCamelContext().getStatus().name());
+        root.put("phase", 
getCamelContext().adapt(ExtendedCamelContext.class).getStatusPhase());
         root.put("uptime", getCamelContext().getUptime());
 
         ManagedCamelContext mcc = 
getCamelContext().getExtension(ManagedCamelContext.class);
diff --git 
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
 
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
index 9136cda08b2..655ed6f91d5 100644
--- 
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
+++ 
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
@@ -203,6 +203,11 @@ public class LightweightCamelContext implements 
ExtendedCamelContext, CatalogCam
         return this;
     }
 
+    @Override
+    public byte getStatusPhase() {
+        return delegate.adapt(ExtendedCamelContext.class).getStatusPhase();
+    }
+
     @Override
     public void disposeModel() {
         delegate.adapt(ExtendedCamelContext.class).disposeModel();
diff --git 
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
 
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
index 9d74aad134d..74eb741367f 100644
--- 
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
+++ 
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
@@ -295,6 +295,11 @@ public class LightweightRuntimeCamelContext implements 
ExtendedCamelContext, Cat
         return reference;
     }
 
+    @Override
+    public byte getStatusPhase() {
+        return reference.adapt(ExtendedCamelContext.class).getStatusPhase();
+    }
+
     @Override
     public void disposeModel() {
         // noop
diff --git 
a/core/camel-health/src/main/java/org/apache/camel/impl/health/ContextHealthCheck.java
 
b/core/camel-health/src/main/java/org/apache/camel/impl/health/ContextHealthCheck.java
index 7e6b5f4cf69..a21a5c458d4 100644
--- 
a/core/camel-health/src/main/java/org/apache/camel/impl/health/ContextHealthCheck.java
+++ 
b/core/camel-health/src/main/java/org/apache/camel/impl/health/ContextHealthCheck.java
@@ -19,6 +19,7 @@ package org.apache.camel.impl.health;
 import java.util.Map;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Ordered;
 import org.apache.camel.health.HealthCheckResultBuilder;
 
@@ -53,6 +54,7 @@ public final class ContextHealthCheck extends 
AbstractHealthCheck {
             builder.detail("context.name", getCamelContext().getName());
             builder.detail("context.version", getCamelContext().getVersion());
             builder.detail("context.status", 
getCamelContext().getStatus().name());
+            builder.detail("context.phase", 
getCamelContext().adapt(ExtendedCamelContext.class).getStatusPhase());
 
             if (getCamelContext().getStatus().isStarted()) {
                 builder.up();
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java
index 9e43658d841..f8d01a1397a 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java
@@ -19,7 +19,6 @@ package org.apache.camel.dsl.jbang.core.commands.process;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Locale;
 import java.util.Map;
 
 import com.github.freva.asciitable.AsciiTable;
@@ -64,10 +63,10 @@ public class CamelContextStatus extends ProcessBaseCommand {
                         row.uptime = extractSince(ph);
                         row.ago = TimeUtils.printSince(row.uptime);
                         JsonObject runtime = (JsonObject) root.get("runtime");
-                        row.platform = runtime != null ? 
runtime.getString("platform") : null;
+                        row.platform = extractPlatform(ph, runtime);
                         row.platformVersion = runtime != null ? 
runtime.getString("version") : null;
                         JsonObject context = (JsonObject) root.get("context");
-                        row.state = 
context.getString("state").toLowerCase(Locale.ROOT);
+                        row.state = context.getInteger("phase");
                         row.camelVersion = context.getString("version");
                         Map<String, ?> stats = context.getMap("statistics");
                         if (stats != null) {
@@ -108,6 +107,18 @@ public class CamelContextStatus extends ProcessBaseCommand 
{
         return 0;
     }
 
+    private String extractPlatform(ProcessHandle ph, JsonObject runtime) {
+        String answer = runtime != null ? runtime.getString("platform") : null;
+        if ("Camel".equals(answer)) {
+            // generic camel, we need to check if we run in JBang
+            String cl = ph.info().commandLine().orElse("");
+            if (cl.contains("main.CamelJBang run")) {
+                answer = "JBang";
+            }
+        }
+        return answer;
+    }
+
     protected int sortRow(Row o1, Row o2) {
         switch (sort) {
             case "pid":
@@ -136,7 +147,7 @@ public class CamelContextStatus extends ProcessBaseCommand {
         String camelVersion;
         String name;
         String ready;
-        String state;
+        int state;
         String ago;
         long uptime;
         String total;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java
index 9bcdf49c06d..d947fe05759 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java
@@ -77,7 +77,7 @@ public class CamelRouteStatus extends ProcessBaseCommand {
                             row.routeId = o.getString("routeId");
                             row.from = o.getString("from");
                             row.source = o.getString("source");
-                            row.state = 
o.getString("state").toLowerCase(Locale.ROOT);
+                            row.state = o.getByte("state");
                             row.age = o.getString("uptime");
                             row.uptime = row.age != null ? 
TimeUtils.toMilliSeconds(row.age) : 0;
                             Map<String, ?> stats = o.getMap("statistics");
@@ -176,7 +176,7 @@ public class CamelRouteStatus extends ProcessBaseCommand {
         String routeId;
         String from;
         String source;
-        String state;
+        byte state;
         String age;
         String total;
         String failed;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
index 0c00c56ddaf..c1334a110b8 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
@@ -58,7 +58,7 @@ public class ListProcess extends ProcessBaseCommand {
                         row.uptime = extractSince(ph);
                         row.ago = TimeUtils.printSince(row.uptime);
                         JsonObject context = (JsonObject) root.get("context");
-                        row.state = 
context.getString("state").toLowerCase(Locale.ROOT);
+                        row.state = context.getInteger("phase");
                         JsonObject hc = (JsonObject) root.get("healthChecks");
                         row.ready = hc != null ? hc.getString("ready") + "/" + 
hc.getString("total") : null;
                         rows.add(row);
@@ -99,7 +99,7 @@ public class ListProcess extends ProcessBaseCommand {
         String pid;
         String name;
         String ready;
-        String state;
+        int state;
         String ago;
         long uptime;
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessBaseCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessBaseCommand.java
index 222774f586b..6194f97a1ea 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessBaseCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessBaseCommand.java
@@ -159,7 +159,7 @@ abstract class ProcessBaseCommand extends CamelCommand {
         return null;
     }
 
-    private static String extractCamelJBangName(String cl) {
+    static String extractCamelJBangName(String cl) {
         String name = StringHelper.after(cl, "main.CamelJBang run");
         if (name != null) {
             name = name.trim();
@@ -187,11 +187,22 @@ abstract class ProcessBaseCommand extends CamelCommand {
         return since;
     }
 
-    static String extractState(String status) {
-        if ("started".equalsIgnoreCase(status)) {
-            status = "Running"; // favour using running instead of started
+    static String extractState(int status) {
+        if (status <= 4) {
+            return "Starting";
+        } else if (status == 5) {
+            return "Running";
+        } else if (status == 6) {
+            return "Suspending";
+        } else if (status == 7) {
+            return "Suspended";
+        } else if (status == 8) {
+            return "Stopping";
+        } else if (status == 9) {
+            return "Stopped";
+        } else {
+            return "Terminating";
         }
-        return StringHelper.capitalize(status);
     }
 
     JsonObject loadStatus(long pid) {

Reply via email to