For our integration of Drools 5.0 we want to provide end users
with limited technical skills the possibility to debug, trace and visualize the
rule execution as well as the fact base.
Questions that are frequently asked by users as well as by
the development/qa team:
-
Did my rule r1 fire for this query?
-
Why did rule r1 not fire (i.e. which constraint
doesn’t match)?
-
Which kind of rule dependencies (chaining) do I have in
my rule base? Rule r1 and r2 are dependent iff action of r1 (e.g. publish a
fact) makes constraint of r2 true.
-
Which rules need to fire in order to generate the
additional fact f1 in the fact base?
-
What is the smallest change in the fact base
(additional facts etc.) in order to make rule r1 to fire (abduction)?
Problems:
-
Eclipse plugin doesn’t provide information of
what didn’t happen and why it didn’t happen ( ‘Audit’
view allows just tracking of positive cases, i.e. what happened). Furthermore
the stability of the eclipse plugin seems to be limited.
-
Integrating over SPI doesn’t allow to show the
Rete network because Rete view works only with drl files
-
How to provide feedback to a normal end user of the
search server (limited tech skills) about rule-related information?
Solution ideas/approaches + our assessment:
1. Use
a run time monitor providing on-demand log trace information when facts are
being published. The log trace provides the information about which and
why a particular constraint is or is not satisfied. Our initial implementation uses
an aspect oriented approach (JBoss AOP) to gather relevant information. In
detail: Our initial implementation uses an aspect oriented approach (JBoss AOP)
to gather the information by intercepting EntryPointNode.assertObject(), and
traversing the rete network to collect the constraint information for every
unique alpha/join node. This will allow to visualize the log trace (GUI) and
interpret the trace in the context of our product. We discussed this approached
in #drools with Edson Tirelli and he was very interested.
2.
Use drools AgendaEventListener. Listener does not gets
enough debug info exposed, esp. we cannot extract the cause to reject a rule.
Not enough information available therefore this one is not an option.
Additionally, it would be nice
for our development to also visualize the Rete-OO network, but that seems to be
impossible when integrating drools directly via the SPI classes. Is there a way
to connect the viewer to a network inside a running VM?
We would like to hear whether you
know any other opinions, or have points how to implement those features. Please
share your experience how to bridge the gap between end-users with limited
technical backgrounds expressing and investigating the rule inference.
Thanks,
Daniel