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 f6d92eb60d9 camel-jbang - Extract name using a helper so its reusable and the same f6d92eb60d9 is described below commit f6d92eb60d98314e86e7663d4b7abfffec84729d Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Dec 1 09:41:47 2022 +0100 camel-jbang - Extract name using a helper so its reusable and the same --- .../core/commands/action/ActionBaseCommand.java | 116 +------------------ .../jbang/core/commands/action/LoggerAction.java | 3 +- .../core/commands/process/CamelContextStatus.java | 3 +- .../core/commands/process/CamelContextTop.java | 3 +- .../core/commands/process/CamelEndpointStatus.java | 3 +- .../commands/process/CamelProcessorStatus.java | 3 +- .../core/commands/process/CamelRouteStatus.java | 3 +- .../jbang/core/commands/process/ListBlocked.java | 3 +- .../core/commands/process/ListCircuitBreaker.java | 3 +- .../dsl/jbang/core/commands/process/ListEvent.java | 3 +- .../jbang/core/commands/process/ListHealth.java | 3 +- .../jbang/core/commands/process/ListInflight.java | 3 +- .../jbang/core/commands/process/ListMetric.java | 3 +- .../jbang/core/commands/process/ListProcess.java | 3 +- .../jbang/core/commands/process/ListService.java | 3 +- .../dsl/jbang/core/commands/process/ListVault.java | 3 +- .../core/commands/process/ProcessBaseCommand.java | 125 +-------------------- .../ProcessHelper.java} | 112 +++--------------- 18 files changed, 51 insertions(+), 347 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionBaseCommand.java index 3ec1257fb32..4381965d9d6 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionBaseCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionBaseCommand.java @@ -19,18 +19,15 @@ package org.apache.camel.dsl.jbang.core.commands.action; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.StringJoiner; -import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.camel.dsl.jbang.core.commands.CamelCommand; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.support.PatternHelper; import org.apache.camel.util.FileUtil; import org.apache.camel.util.IOHelper; -import org.apache.camel.util.StringHelper; import org.apache.camel.util.json.JsonObject; import org.apache.camel.util.json.Jsoner; @@ -64,7 +61,7 @@ abstract class ActionBaseCommand extends CamelCommand { JsonObject root = loadStatus(ph.pid()); // there must be a status file for the running Camel integration if (root != null) { - String pName = extractName(root, ph); + String pName = ProcessHelper.extractName(root, ph); // ignore file extension, so it is easier to match by name pName = FileUtil.onlyName(pName); if (pName != null && !pName.isEmpty() && PatternHelper.matchPattern(pName, pattern)) { @@ -76,115 +73,6 @@ abstract class ActionBaseCommand extends CamelCommand { return pids; } - static String extractMainClass(JsonObject root) { - JsonObject runtime = (JsonObject) root.get("runtime"); - return runtime != null ? runtime.getString("mainClass") : null; - } - - static String extractName(JsonObject root, ProcessHandle ph) { - String name = doExtractName(root, ph); - return FileUtil.stripPath(name); - } - - static String doExtractName(JsonObject root, ProcessHandle ph) { - // favour main class if known - if (root != null) { - String mc = extractMainClass(root); - if (mc != null) { - return mc; - } - } - String cl = ph.info().commandLine().orElse(""); - - // this may be a maven plugin run that spawns a child process where Camel actually runs (link to child) - String mvn = extractMavenPluginName(cl); - if (mvn != null) { - // is camel running in any of the children? - boolean camel = ph.children().anyMatch(ch -> !extractName(root, ch).isEmpty()); - if (camel) { - return ""; // skip parent as we want only the child process with camel - } - } - - // try first camel-jbang - String name = extractCamelJBangName(cl); - if (name != null) { - return name; - } - - // this may be a maven plugin run that spawns a child process where Camel actually runs (link to parent) - mvn = extractMavenPluginName(cl); - if (mvn == null && ph.parent().isPresent()) { - // try parent as it may spawn a sub process - String clp = ph.parent().get().info().commandLine().orElse(""); - mvn = extractMavenPluginName(clp); - } - - name = extractCamelName(cl, mvn); - return name == null ? "" : name; - } - - private static String extractMavenPluginName(String cl) { - String name = StringHelper.after(cl, "org.codehaus.plexus.classworlds.launcher.Launcher"); - if (name != null) { - return name.trim(); - } - return null; - } - - private static String extractCamelName(String cl, String mvn) { - if (cl != null) { - if (cl.contains("camel-spring-boot") && mvn != null) { - int pos = cl.lastIndexOf(" "); - if (pos != -1) { - String after = cl.substring(pos); - after = after.trim(); - if (after.matches("[\\w|.]+")) { - return after; - } - } - return mvn; - } else if (cl.contains("camel-quarkus") && mvn != null) { - return mvn; - } else { - int pos = cl.lastIndexOf(" "); - if (pos != -1) { - String after = cl.substring(pos); - after = after.trim(); - if (after.matches("[\\w|.]+")) { - return after; - } - } - if (mvn != null) { - return mvn; - } - return cl.contains("camel-main") ? "camel-main" : "camel-core"; - } - } - - return null; - } - - static String extractCamelJBangName(String cl) { - String name = StringHelper.after(cl, "main.CamelJBang run"); - if (name != null) { - name = name.trim(); - StringJoiner js = new StringJoiner(" "); - // focus only on the route files supported (to skip such as readme files) - Matcher matcher = PATTERN.matcher(name); - while (matcher.find()) { - String part = matcher.group(); - String ext = FileUtil.onlyExt(part, true); - if (ext != null && Arrays.asList(DSL_EXT).contains(ext)) { - js.add(part); - } - } - return js.toString(); - } - - return null; - } - static long extractSince(ProcessHandle ph) { long since = 0; if (ph.info().startInstant().isPresent()) { diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerAction.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerAction.java index 942e99e5ee2..531a4670d47 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerAction.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/LoggerAction.java @@ -27,6 +27,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.IOHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonObject; @@ -107,7 +108,7 @@ public class LoggerAction extends ActionBaseCommand { } row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } JsonObject jo = (JsonObject) root.get("logger"); if (jo != null) { 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 ada689524f8..1a331516dba 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 @@ -26,6 +26,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; @@ -65,7 +66,7 @@ public class CamelContextStatus extends ProcessBaseCommand { } row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.pid = "" + ph.pid(); row.uptime = extractSince(ph); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java index 17db7411cd1..9cdbcc8c334 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java @@ -26,6 +26,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonObject; import picocli.CommandLine; @@ -65,7 +66,7 @@ public class CamelContextTop extends ProcessBaseCommand { } row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.pid = "" + ph.pid(); row.uptime = extractSince(ph); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelEndpointStatus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelEndpointStatus.java index aff026e674a..53d2c44192f 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelEndpointStatus.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelEndpointStatus.java @@ -25,6 +25,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.support.PatternHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; @@ -90,7 +91,7 @@ public class CamelEndpointStatus extends ProcessBaseCommand { Row row = new Row(); row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.pid = "" + ph.pid(); row.endpoint = o.getString("uri"); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java index 1e5920936f4..39a30060c69 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java @@ -26,6 +26,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.StringHelper; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; @@ -79,7 +80,7 @@ public class CamelProcessorStatus extends ProcessBaseCommand { Row row = new Row(); row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.pid = "" + ph.pid(); row.routeId = o.getString("routeId"); 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 12a976f1db5..f5cb0545a34 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 @@ -26,6 +26,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; @@ -82,7 +83,7 @@ public class CamelRouteStatus extends ProcessBaseCommand { Row row = new Row(); row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.pid = "" + ph.pid(); row.routeId = o.getString("routeId"); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java index cd8494599d0..5cc8ac73359 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java @@ -25,6 +25,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; @@ -64,7 +65,7 @@ public class ListBlocked extends ProcessBaseCommand { } row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.pid = "" + ph.pid(); row.uptime = extractSince(ph); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java index 7137f837236..d91051babaa 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java @@ -25,6 +25,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; @@ -64,7 +65,7 @@ public class ListCircuitBreaker extends ProcessBaseCommand { } row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.pid = "" + ph.pid(); row.uptime = extractSince(ph); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java index 16ee7103e43..9f201aecc24 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java @@ -25,6 +25,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; @@ -68,7 +69,7 @@ public class ListEvent extends ProcessBaseCommand { } row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.pid = "" + ph.pid(); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java index 80f4cd9324e..5ba23909a2a 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java @@ -30,6 +30,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.health.HealthCheckHelper; import org.apache.camel.util.StringHelper; import org.apache.camel.util.TimeUtils; @@ -105,7 +106,7 @@ public class ListHealth extends ProcessBaseCommand { row.ago = TimeUtils.printSince(row.uptime); row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.id = o.getString("id"); row.group = o.getString("group"); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java index e27de1b9a56..ce0ae54e0c5 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java @@ -25,6 +25,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; @@ -64,7 +65,7 @@ public class ListInflight extends ProcessBaseCommand { } row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.pid = "" + ph.pid(); row.uptime = extractSince(ph); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java index 4a59e827604..b4252053865 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java @@ -25,6 +25,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; @@ -76,7 +77,7 @@ public class ListMetric extends ProcessBaseCommand { } row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.pid = "" + ph.pid(); row.uptime = extractSince(ph); 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 fc5f64f0e85..85a9475e3e8 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 @@ -25,6 +25,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonObject; import picocli.CommandLine; @@ -65,7 +66,7 @@ public class ListProcess extends ProcessBaseCommand { } row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.state = context.getInteger("phase"); JsonObject hc = (JsonObject) root.get("healthChecks"); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java index 92bdcd2fd16..3a45113de8b 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java @@ -25,6 +25,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; @@ -64,7 +65,7 @@ public class ListService extends ProcessBaseCommand { } row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } row.pid = "" + ph.pid(); row.uptime = extractSince(ph); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java index 0040e05c180..d6092254a00 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java @@ -25,6 +25,7 @@ import com.github.freva.asciitable.Column; import com.github.freva.asciitable.HorizontalAlign; import com.github.freva.asciitable.OverflowBehaviour; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.util.TimeUtils; import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; @@ -61,7 +62,7 @@ public class ListVault extends ProcessBaseCommand { } row.name = context.getString("name"); if ("CamelJBang".equals(row.name)) { - row.name = extractName(root, ph); + row.name = ProcessHelper.extractName(root, ph); } JsonObject vaults = (JsonObject) root.get("vaults"); if (vaults != null) { 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 92d4ed77e90..33623ea384b 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 @@ -19,14 +19,11 @@ package org.apache.camel.dsl.jbang.core.commands.process; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.StringJoiner; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.apache.camel.dsl.jbang.core.commands.CamelCommand; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; +import org.apache.camel.dsl.jbang.core.common.ProcessHelper; import org.apache.camel.support.PatternHelper; import org.apache.camel.util.FileUtil; import org.apache.camel.util.IOHelper; @@ -36,9 +33,6 @@ import org.apache.camel.util.json.Jsoner; abstract class ProcessBaseCommand extends CamelCommand { - private static final String[] DSL_EXT = new String[] { "groovy", "java", "js", "jsh", "kts", "xml", "yaml" }; - private static final Pattern PATTERN = Pattern.compile("([\\w|\\-.])+"); - public ProcessBaseCommand(CamelJBangMain main) { super(main); } @@ -64,7 +58,7 @@ abstract class ProcessBaseCommand extends CamelCommand { JsonObject root = loadStatus(ph.pid()); // there must be a status file for the running Camel integration if (root != null) { - String pName = extractName(root, ph); + String pName = ProcessHelper.extractName(root, ph); // ignore file extension, so it is easier to match by name pName = FileUtil.onlyName(pName); if (pName != null && !pName.isEmpty() && PatternHelper.matchPattern(pName, pattern)) { @@ -76,121 +70,6 @@ abstract class ProcessBaseCommand extends CamelCommand { return pids; } - static String extractMainClass(JsonObject root) { - JsonObject runtime = (JsonObject) root.get("runtime"); - return runtime != null ? runtime.getString("mainClass") : null; - } - - static String extractName(JsonObject root, ProcessHandle ph) { - String name = doExtractName(root, ph); - return FileUtil.stripPath(name); - } - - static String doExtractName(JsonObject root, ProcessHandle ph) { - // favour main class if known - if (root != null) { - String mc = extractMainClass(root); - if (mc != null) { - return mc; - } - } - String cl = ph.info().commandLine().orElse(""); - - // this may be a maven plugin run that spawns a child process where Camel actually runs (link to child) - String mvn = extractMavenPluginName(cl); - if (mvn != null) { - // is camel running in any of the children? - boolean camel = ph.children().anyMatch(ch -> !extractName(root, ch).isEmpty()); - if (camel) { - return ""; // skip parent as we want only the child process with camel - } - } - - // try first camel-jbang - String name = extractCamelJBangName(cl); - if (name != null && !name.isEmpty()) { - return name; - } - - // this may be a maven plugin run that spawns a child process where Camel actually runs (link to parent) - mvn = extractMavenPluginName(cl); - if (mvn == null && ph.parent().isPresent()) { - // try parent as it may spawn a sub process - String clp = ph.parent().get().info().commandLine().orElse(""); - mvn = extractMavenPluginName(clp); - } - - name = extractCamelName(cl, mvn); - if (name == null && root != null) { - JsonObject jo = (JsonObject) root.get("context"); - if (jo != null) { - name = jo.getString("name"); - } - } - - return name == null ? "" : name; - } - - private static String extractMavenPluginName(String cl) { - String name = StringHelper.after(cl, "org.codehaus.plexus.classworlds.launcher.Launcher"); - if (name != null) { - return name.trim(); - } - return null; - } - - private static String extractCamelName(String cl, String mvn) { - if (cl != null) { - if (cl.contains("camel-spring-boot") && mvn != null) { - int pos = cl.lastIndexOf(" "); - if (pos != -1) { - String after = cl.substring(pos); - after = after.trim(); - if (after.matches("[\\w|.]+")) { - return after; - } - } - return mvn; - } else if (cl.contains("camel-quarkus") && mvn != null) { - return mvn; - } else { - int pos = cl.lastIndexOf(" "); - if (pos != -1) { - String after = cl.substring(pos); - after = after.trim(); - if (after.matches("[\\w|.]+")) { - return after; - } - } - if (mvn != null) { - return mvn; - } - } - } - - return null; - } - - static String extractCamelJBangName(String cl) { - String name = StringHelper.after(cl, "main.CamelJBang run"); - if (name != null) { - name = name.trim(); - StringJoiner js = new StringJoiner(" "); - // focus only on the route files supported (to skip such as readme files) - Matcher matcher = PATTERN.matcher(name); - while (matcher.find()) { - String part = matcher.group(); - String ext = FileUtil.onlyExt(part, true); - if (ext != null && Arrays.asList(DSL_EXT).contains(ext)) { - js.add(part); - } - } - return js.toString(); - } - - return null; - } - static long extractSince(ProcessHandle ph) { long since = 0; if (ph.info().startInstant().isPresent()) { diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/ProcessHelper.java similarity index 61% copy from dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionBaseCommand.java copy to dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/ProcessHelper.java index 3ec1257fb32..db5d74fd2fa 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/ActionBaseCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/ProcessHelper.java @@ -14,74 +14,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.dsl.jbang.core.commands.action; +package org.apache.camel.dsl.jbang.core.common; -import java.io.File; -import java.io.FileInputStream; -import java.util.ArrayList; import java.util.Arrays; -import java.util.List; import java.util.StringJoiner; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.camel.dsl.jbang.core.commands.CamelCommand; -import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; -import org.apache.camel.support.PatternHelper; import org.apache.camel.util.FileUtil; -import org.apache.camel.util.IOHelper; import org.apache.camel.util.StringHelper; import org.apache.camel.util.json.JsonObject; -import org.apache.camel.util.json.Jsoner; -abstract class ActionBaseCommand extends CamelCommand { +public final class ProcessHelper { private static final String[] DSL_EXT = new String[] { "groovy", "java", "js", "jsh", "kts", "xml", "yaml" }; private static final Pattern PATTERN = Pattern.compile("([\\w|\\-.])+"); - public ActionBaseCommand(CamelJBangMain main) { - super(main); + private ProcessHelper() { } - List<Long> findPids(String name) { - List<Long> pids = new ArrayList<>(); - - // we need to know the pids of the running camel integrations - if (name.matches("\\d+")) { - return List.of(Long.parseLong(name)); - } else { - // lets be open and match all that starts with this pattern - if (!name.endsWith("*")) { - name = name + "*"; - } - } - - final long cur = ProcessHandle.current().pid(); - final String pattern = name; - ProcessHandle.allProcesses() - .filter(ph -> ph.pid() != cur) - .forEach(ph -> { - JsonObject root = loadStatus(ph.pid()); - // there must be a status file for the running Camel integration - if (root != null) { - String pName = extractName(root, ph); - // ignore file extension, so it is easier to match by name - pName = FileUtil.onlyName(pName); - if (pName != null && !pName.isEmpty() && PatternHelper.matchPattern(pName, pattern)) { - pids.add(ph.pid()); - } - } - }); - - return pids; - } - - static String extractMainClass(JsonObject root) { - JsonObject runtime = (JsonObject) root.get("runtime"); - return runtime != null ? runtime.getString("mainClass") : null; - } - - static String extractName(JsonObject root, ProcessHandle ph) { + public static String extractName(JsonObject root, ProcessHandle ph) { String name = doExtractName(root, ph); return FileUtil.stripPath(name); } @@ -108,7 +60,7 @@ abstract class ActionBaseCommand extends CamelCommand { // try first camel-jbang String name = extractCamelJBangName(cl); - if (name != null) { + if (name != null && !name.isEmpty()) { return name; } @@ -121,6 +73,13 @@ abstract class ActionBaseCommand extends CamelCommand { } name = extractCamelName(cl, mvn); + if (name == null && root != null) { + JsonObject jo = (JsonObject) root.get("context"); + if (jo != null) { + name = jo.getString("name"); + } + } + return name == null ? "" : name; } @@ -132,6 +91,11 @@ abstract class ActionBaseCommand extends CamelCommand { return null; } + static String extractMainClass(JsonObject root) { + JsonObject runtime = (JsonObject) root.get("runtime"); + return runtime != null ? runtime.getString("mainClass") : null; + } + private static String extractCamelName(String cl, String mvn) { if (cl != null) { if (cl.contains("camel-spring-boot") && mvn != null) { @@ -158,7 +122,6 @@ abstract class ActionBaseCommand extends CamelCommand { if (mvn != null) { return mvn; } - return cl.contains("camel-main") ? "camel-main" : "camel-core"; } } @@ -185,45 +148,4 @@ abstract class ActionBaseCommand extends CamelCommand { return null; } - static long extractSince(ProcessHandle ph) { - long since = 0; - if (ph.info().startInstant().isPresent()) { - since = ph.info().startInstant().get().toEpochMilli(); - } - return since; - } - - 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 "Terminating"; - } else if (status == 9) { - return "Terminated"; - } else { - return "Terminated"; - } - } - - JsonObject loadStatus(long pid) { - try { - File f = getStatusFile("" + pid); - if (f != null) { - FileInputStream fis = new FileInputStream(f); - String text = IOHelper.loadText(fis); - IOHelper.close(fis); - return (JsonObject) Jsoner.deserialize(text); - } - } catch (Throwable e) { - // ignore - } - return null; - } - }