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

tkobayas pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git


The following commit(s) were added to refs/heads/main by this push:
     new 9aa9bbbb03 [incubator-kie-drools-6053] MetricLogUtils forcibly uses 
Micrometer when available in classpath (#6054)
9aa9bbbb03 is described below

commit 9aa9bbbb03aead68160485a000c7261b05f5296b
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Thu Aug 29 15:20:55 2024 +0900

    [incubator-kie-drools-6053] MetricLogUtils forcibly uses Micrometer when 
available in classpath (#6054)
    
    - Add drools.metric.micrometer.disabled switch
---
 .../_performance-tuning-drl-ref.adoc               |  3 ++
 .../org/drools/metric/util/MetricLogUtils.java     | 15 ++++++-
 .../java/org/drools/metric/AbstractMetricTest.java |  2 -
 .../java/org/drools/metric/MetricLogUtilsTest.java | 51 ++++++++++++++++------
 drools-metric/src/test/resources/logback-test.xml  |  2 +-
 5 files changed, 55 insertions(+), 18 deletions(-)

diff --git 
a/drools-docs/src/modules/ROOT/pages/language-reference/_performance-tuning-drl-ref.adoc
 
b/drools-docs/src/modules/ROOT/pages/language-reference/_performance-tuning-drl-ref.adoc
index ac5f4627fd..a436827077 100644
--- 
a/drools-docs/src/modules/ROOT/pages/language-reference/_performance-tuning-drl-ref.adoc
+++ 
b/drools-docs/src/modules/ROOT/pages/language-reference/_performance-tuning-drl-ref.adoc
@@ -143,6 +143,9 @@ Alternatively, you can use `drools-metric` to expose the 
data using https://asci
   Metrics.addRegitry(new JmxMeterRegistry(s -> null, Clock.SYSTEM));
 ----
 
++
+If you want to use logging instead of Micrometer even though Micrometer is 
available in classpath, you can disable it by setting the system property 
`drools.metric.micrometer.disabled` to `true`.
+
 +
 Regardless of whether you want to use logging or Micrometer, you need to 
enable `MetricLogUtils` by setting the system property 
`drools.metric.logger.enabled` to `true`. Optionally, you can change the 
microseconds threshold of metric reporting by setting the 
`drools.metric.logger.threshold` system property.
 
diff --git 
a/drools-metric/src/main/java/org/drools/metric/util/MetricLogUtils.java 
b/drools-metric/src/main/java/org/drools/metric/util/MetricLogUtils.java
index 5eef523bf5..a66bdd83ef 100644
--- a/drools-metric/src/main/java/org/drools/metric/util/MetricLogUtils.java
+++ b/drools-metric/src/main/java/org/drools/metric/util/MetricLogUtils.java
@@ -30,6 +30,11 @@ public class MetricLogUtils {
 
     public static final String METRIC_LOGGER_ENABLED = 
"drools.metric.logger.enabled";
     private boolean enabled = 
Boolean.parseBoolean(getConfig(METRIC_LOGGER_ENABLED, "false"));
+
+    // Set true when you want to disable Micrometer even if it is available.
+    public static final String METRIC_MICROMETER_DISABLED = 
"drools.metric.micrometer.disabled";
+    private boolean micrometerDisabled = 
Boolean.parseBoolean(getConfig(METRIC_MICROMETER_DISABLED, "false"));
+
     private boolean micrometerAvailable = isMicrometerAvailable();
 
     public static final String METRIC_LOGGER_THRESHOLD = 
"drools.metric.logger.threshold";
@@ -37,7 +42,7 @@ public class MetricLogUtils {
 
     private final ThreadLocal<NodeStats> nodeStats = new ThreadLocal<>();
 
-    private static final MetricLogUtils INSTANCE = new MetricLogUtils();
+    private static MetricLogUtils INSTANCE = new MetricLogUtils();
 
     private static boolean isMicrometerAvailable() {
         try {
@@ -92,7 +97,7 @@ public class MetricLogUtils {
                 long elapsedTimeInNanos = (System.nanoTime() - 
stats.getStartTime());
                 long elapsedTimeInMicro = elapsedTimeInNanos / 1000;
                 if (evalCount > 0 && elapsedTimeInMicro > threshold) {
-                    if (micrometerAvailable) {
+                    if (micrometerAvailable && !micrometerDisabled) {
                         
MicrometerUtils.INSTANCE.triggerMicrometer(stats.getNode(), evalCount, 
elapsedTimeInNanos);
                     } else {  // Only log when Micrometer is not enabled.
                         logger.trace("{}, evalCount:{}, elapsedMicro:{}", 
stats.getNode(), evalCount, elapsedTimeInMicro);
@@ -105,4 +110,10 @@ public class MetricLogUtils {
         }
     }
 
+    /*
+     * This method is only used for testing purposes.
+     */
+    public static void recreateInstance() {
+        MetricLogUtils.INSTANCE = new MetricLogUtils();
+    }
 }
diff --git 
a/drools-metric/src/test/java/org/drools/metric/AbstractMetricTest.java 
b/drools-metric/src/test/java/org/drools/metric/AbstractMetricTest.java
index e09541f5ec..94afb25f89 100644
--- a/drools-metric/src/test/java/org/drools/metric/AbstractMetricTest.java
+++ b/drools-metric/src/test/java/org/drools/metric/AbstractMetricTest.java
@@ -47,6 +47,4 @@ abstract class AbstractMetricTest extends 
CommonTestMethodBase {
         MicrometerUtils.INSTANCE.clear();
         registry = null;
     }
-
-
 }
diff --git 
a/drools-metric/src/test/java/org/drools/metric/MetricLogUtilsTest.java 
b/drools-metric/src/test/java/org/drools/metric/MetricLogUtilsTest.java
index fc9c9edd27..3262031bbe 100644
--- a/drools-metric/src/test/java/org/drools/metric/MetricLogUtilsTest.java
+++ b/drools-metric/src/test/java/org/drools/metric/MetricLogUtilsTest.java
@@ -26,6 +26,7 @@ import java.util.stream.IntStream;
 import io.micrometer.core.instrument.Counter;
 import io.micrometer.core.instrument.Timer;
 import io.micrometer.core.instrument.search.Search;
+import org.drools.metric.util.MetricLogUtils;
 import org.drools.mvel.compiler.Address;
 import org.drools.mvel.compiler.Person;
 import org.junit.Test;
@@ -39,6 +40,24 @@ public class MetricLogUtilsTest extends AbstractMetricTest {
     @Test
     public void testJoin() {
 
+        runJoinRules();
+
+        // 2 nodes expected
+        Collection<Timer> timers = Search.in(registry)
+                .name("org.drools.metric.elapsed.time.per.evaluation")
+                .timers();
+        assertThat(timers).hasSize(2);
+        Collection<Timer> timers2 = Search.in(registry)
+                .name("org.drools.metric.elapsed.time")
+                .timers();
+        assertThat(timers2).hasSize(2);
+        Collection<Counter> counters = Search.in(registry)
+                .name("org.drools.metric.evaluation.count")
+                .counters();
+        assertThat(counters).hasSize(2);
+    }
+
+    private void runJoinRules() {
         String str =
                 "import " + Address.class.getCanonicalName() + "\n" +
                         "import " + Person.class.getCanonicalName() + "\n" +
@@ -67,20 +86,26 @@ public class MetricLogUtilsTest extends AbstractMetricTest {
         int fired = ksession.fireAllRules();
         ksession.dispose();
         assertThat(fired).isEqualTo(36);
+    }
 
-        // 2 nodes expected
-        Collection<Timer> timers = Search.in(registry)
-                .name("org.drools.metric.elapsed.time.per.evaluation")
-                .timers();
-        assertThat(timers).hasSize(2);
-        Collection<Timer> timers2 = Search.in(registry)
-                .name("org.drools.metric.elapsed.time")
-                .timers();
-        assertThat(timers2).hasSize(2);
-        Collection<Counter> counters = Search.in(registry)
-                .name("org.drools.metric.evaluation.count")
-                .counters();
-        assertThat(counters).hasSize(2);
+    @Test
+    public void micrometerDisabled() {
+
+        try {
+            System.setProperty(MetricLogUtils.METRIC_MICROMETER_DISABLED, 
"true");
+            MetricLogUtils.recreateInstance();
+
+            runJoinRules();
+
+            // Micrometer is disabled
+            Collection<Timer> timers = Search.in(registry)
+                    .name("org.drools.metric.elapsed.time.per.evaluation")
+                    .timers();
+            assertThat(timers).isEmpty();
+        } finally {
+            System.clearProperty(MetricLogUtils.METRIC_MICROMETER_DISABLED); 
// default is false
+            MetricLogUtils.recreateInstance();
+        }
     }
 
     @Test
diff --git a/drools-metric/src/test/resources/logback-test.xml 
b/drools-metric/src/test/resources/logback-test.xml
index 8731924239..90bb41ab1d 100644
--- a/drools-metric/src/test/resources/logback-test.xml
+++ b/drools-metric/src/test/resources/logback-test.xml
@@ -30,7 +30,7 @@
   <logger name="org.kie" level="warn"/>
   <logger name="org.drools" level="warn"/>
 
-<!--   <logger name="org.drools.metric.util.MetricLogUtils" level="trace"/> -->
+  <logger name="org.drools.metric.util.MetricLogUtils" level="trace"/>
 
   <root level="warn">
     <appender-ref ref="consoleAppender" />


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to