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]