Use drools‐metric with kogito application - tkobayas/drools-tech-notes GitHub Wiki

Use ReteDumper

Create a REST endpoint and pick the kbase from RuleUnitInstance. This is an example for ruleunit-quarkus-example in kogito-examples

@Path("/test")
public class TestEndpoint {

    @jakarta.inject.Inject
    RuleUnit<org.kie.kogito.queries.LoanUnit> ruleUnit;

    public TestEndpoint() {
    }

    public TestEndpoint(RuleUnit<org.kie.kogito.queries.LoanUnit> ruleUnit) {
        this.ruleUnit = ruleUnit;
    }

    @GET
    public String checkReteDumper() {
        RuleUnitInstance<org.kie.kogito.queries.LoanUnit> instance = ruleUnit.createInstance(new LoanUnit());
        RuleUnitExecutorImpl evaluator = (RuleUnitExecutorImpl) ((ReteEvaluatorBasedRuleUnitInstance) instance).getEvaluator();
        InternalRuleBase ruleBase = evaluator.getRuleBase();
        ReteDumper.dumpRete(ruleBase);
        instance.close();
        return "Rete is dumped";
    }
}

Use drools-metric

Steps to use drools-metric in ruleunit-quarkus-example (10.0.x branch)

  • Add drools-metric dependency in pom.xml
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-metric</artifactId>
      <version>${version.org.kie.kogito}</version>
    </dependency>
  • Add TRACE log level in application.properties
quarkus.log.category."org.drools.metric.util.MetricLogUtils".min-level=TRACE
quarkus.log.category."org.drools.metric.util.MetricLogUtils".level=TRACE
  • Add a dummy "join" rule in RuleUnitQuery.drl, because other rules are too simple to be counted by drools-metric
rule dummyJoin
when
    $l1 : /loanApplications[applicant.age < 20]
    $l2 : /loanApplications[this != $l1]
then
    System.out.println($l1 + " : " + $l2);
end
  • Run with mvn clean compile quarkus:dev -Ddrools.metric.logger.enabled=true -Ddrools.metric.logger.threshold=0
  • Send a request
curl -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"maxAmount":5000,"loanApplications":[{"id":"ABC10001","amount":2000,"deposit":100,"applicant":{"age":45,"name":"John"}}, {"id":"ABC10002","amount":5000,"deposit":100,"applicant":{"age":25,"name":"Paul"}}, {"id":"ABC10015","amount":1000,"deposit":100,"applicant":{"age":12,"name":"George"}}]}' http://localhost:8080/find-approved

You will see the log.

2025-05-21 12:12:27,558 TRACE [org.dro.met.uti.MetricLogUtils] (executor-thread-1) [JoinNode(44) - [ClassObjectType class=org.kie.kogito.queries.LoanApplication]], evalCount:3, elapsedMicro:91
⚠️ **GitHub.com Fallback** ⚠️