You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2022/01/05 13:08:21 UTC

[camel] 02/02: CAMEL-17428: camel-jbang - Add -flight-recorder to startup JFR capturing

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

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

commit 397e6c35d88fff1bcdd8d1a43c3c606e070599b2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Jan 5 13:40:30 2022 +0100

    CAMEL-17428: camel-jbang - Add -flight-recorder to startup JFR capturing
---
 .../java/org/apache/camel/dsl/jbang/core/commands/Run.java | 14 +++++++++++---
 .../src/main/java/org/apache/camel/main/KameletMain.java   | 13 +++++++++++++
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index ae32a24..b63c431 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -79,9 +79,13 @@ class Run implements Callable<Integer> {
     private boolean fileLock = true;
 
     @Option(names = { "--jfr" },
-            description = "Whether to start the jfr recorder or not")
+            description = "Enables Java Flight Recorder saving recording to disk on exit")
     private boolean jfr;
 
+    @Option(names = { "--jfr-profile" },
+            description = "Java Flight Recorder profile to use (such as default or profile)")
+    private String jfrProfile;
+
     @Option(names = { "--local-kamelet-dir" },
             description = "Local directory to load Kamelets from (take precedence))")
     private String localKameletDir;
@@ -147,8 +151,12 @@ class Run implements Callable<Integer> {
         }
 
         if (jfr) {
-            main.addInitialProperty("camel.main.startup-recorder", "java-flight-recorder");
-            main.addInitialProperty("camel.main.startupRecorderRecording", "true");
+            main.addInitialProperty("camel.jbang.jfr", "jfr");
+        }
+        if (jfrProfile != null) {
+            // turn on jfr if a profile was specified
+            main.addInitialProperty("camel.jbang.jfr", "jfr");
+            main.addInitialProperty("camel.jbang.jfr-profile", jfrProfile);
         }
 
         if (fileLock) {
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 9ade32a..f20f4b5 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -25,6 +25,7 @@ import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.Registry;
+import org.apache.camel.startup.jfr.FlightRecorderStartupStepRecorder;
 
 /**
  * A Main class for booting up Camel with Kamelet in standalone mode.
@@ -167,6 +168,18 @@ public class KameletMain extends MainCommandLineSupport {
             VertxHttpServer.registerServer(answer, Integer.parseInt(port.toString()));
         }
 
+        // need to setup jfr early
+        Object jfr = getInitialProperties().get("camel.jbang.jfr");
+        Object jfrProfile = getInitialProperties().get("camel.jbang.jfr-profile");
+        if ("jfr".equals(jfr) || jfrProfile != null) {
+            FlightRecorderStartupStepRecorder recorder = new FlightRecorderStartupStepRecorder();
+            recorder.setRecording(true);
+            if (jfrProfile != null) {
+                recorder.setRecordingProfile(jfrProfile.toString());
+            }
+            answer.setStartupStepRecorder(recorder);
+        }
+
         if (download) {
             try {
                 // use resolver that can auto downloaded