Use drools‐metric with kogito application - tkobayas/drools-tech-notes GitHub Wiki
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";
}
}
Steps to use drools-metric in ruleunit-quarkus-example
(10.0.x
branch)
- Add
drools-metric
dependency inpom.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