Simple Drools Examples

17
Simple Drools Examples A couple of simple examples for the JUG Milano meeting. Matteo Mortari http://linkedin.com/in/matteomortari http://github.com/tarilabs @tari_manga

Transcript of Simple Drools Examples

Page 1: Simple Drools Examples

Simple Drools Examples

A couple of simple examples for the JUG Milano meeting.

Matteo Mortarihttp://linkedin.com/in/matteomortarihttp://github.com/tarilabs@tari_manga

Page 2: Simple Drools Examples

Drools: effective use-cases

● Business logic changes often● Rule definition as common language between

Developers, Analysts and Stakeholders● Framework to support Data Analysis

● Data “cleaning”: filtering, augmentation, ...● Inference: assert new data, FSM, …● Time series: Complex Event Processing (CEP)

… and many others!

Page 3: Simple Drools Examples

( Two simple examples )

cit. YouTube: Maccio Capatonda “Burle”

Page 4: Simple Drools Examples

Example #1Monitor commuting route

● Strike● Traffic delays● Multiple notifications

...

Live: http://reex2014-tarilabs.rhcloud.com/ Source: https://github.com/tarilabs/reex2014-rules

Page 5: Simple Drools Examples

Strike announcements

Page 6: Simple Drools Examples

Metro delays

Page 7: Simple Drools Examples

Final result

Page 8: Simple Drools Examples

(demo)

Page 9: Simple Drools Examples

(demo)

Page 10: Simple Drools Examples

(demo)

Page 11: Simple Drools Examples

(demo)

Page 12: Simple Drools Examples

Example #2Filtering, Inference, CEP, ...

https://github.com/tarilabs/mpes-demo2015/blob/master/src/main/resources/rules.drl

Page 13: Simple Drools Examples

Filtering rules

rule "Filter01"no-loopsalience 1000when $e : ZnetRxIoSampleResponse( addressAsMacFormat(remoteAddress64) != "00:13:A2:00:40:68:E0:95" )then retract($e);end

rule "Filter02"no-loop salience 1000when $e : ZNetRxIoSampleResponse( addressAsMacFormat(remoteAddress64) == "00:13:A2:00:40:68:E0:95" , containsAnalog == false )then retract($e);end

Page 14: Simple Drools Examples

Inference rules

rule "Detect Docked"no-loop when accumulate ( ZNetRxIoSampleResponse( containsAnalog == true, $analog1 : analog1 ) over window:length( 3 ); $avg : average( $analog1 ), $count : count( $analog1 ); $avg > 950 , $count == 3 ) not ( DockedEvt() )then DockedEvt de = new DockedEvt(); de.setTs(drools.getWorkingMemory().getSessionClock().getCurrentTime()); insert(de);end

Page 15: Simple Drools Examples

CEP rules

rule "Toothbrush Session"no-loopwhen $ude : UnDockedEvt() $de : DockedEvt( this after $ude )then long millis = $de.getTs() - $ude.getTs() - 1000; long mins = millis/1000/60; long secs = (millis/1000) % 60; long oscillations = (long) ( (7600.0/60/1000) * millis ); String sentence = "I just used my toothbrush! Total time: " +( (mins>0)?mins+"m":"" ) +secs+"s " +"Oscillations: "+oscillations; LOG.debug("{}", sentence); onCamel("direct:sentence", sentence); retract($de); retract($ude);end

Page 17: Simple Drools Examples

Thank you!

Thanks JUG Milano

Matteo Mortarihttp://linkedin.com/in/matteomortarihttp://github.com/tarilabs@tari_manga