Advertisement
Guest User

Droolstest.java

a guest
Sep 1st, 2012
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.35 KB | None | 0 0
  1. package com.sample;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.DataInputStream;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.io.InputStreamReader;
  11. import java.text.DateFormat;
  12. import java.text.SimpleDateFormat;
  13. import java.util.ArrayList;
  14. import java.util.Collections;
  15. import java.util.Date;
  16. import java.util.Random;
  17. import java.util.concurrent.TimeUnit;
  18.  
  19. import org.drools.KnowledgeBase;
  20. import org.drools.KnowledgeBaseConfiguration;
  21. import org.drools.KnowledgeBaseFactory;
  22. import org.drools.builder.KnowledgeBuilder;
  23. import org.drools.builder.KnowledgeBuilderError;
  24. import org.drools.builder.KnowledgeBuilderErrors;
  25. import org.drools.builder.KnowledgeBuilderFactory;
  26. import org.drools.builder.ResourceType;
  27. import org.drools.conf.EventProcessingOption;
  28. import org.drools.io.ResourceFactory;
  29. import org.drools.runtime.KnowledgeSessionConfiguration;
  30. import org.drools.runtime.StatefulKnowledgeSession;
  31. import org.drools.runtime.conf.ClockTypeOption;
  32. import org.drools.time.SessionPseudoClock;
  33.  
  34. /**
  35.  * This is a sample class to launch a rule.
  36.  */
  37. public class DroolsTest {
  38.  
  39.     static class rulesThread extends Thread {
  40.         StatefulKnowledgeSession _ksession;
  41.         public rulesThread(StatefulKnowledgeSession k) {
  42.             _ksession = k;
  43.         }
  44.         public void run() {
  45.             _ksession.fireUntilHalt();
  46.         }
  47.     }
  48.    
  49.     public static final void main(String[] args) {
  50.         try {
  51.             //generate rawEvent
  52.             generateRawEvents("rawEvents.source");
  53.             // load up the knowledge base
  54.             KnowledgeBase kbase = readKnowledgeBase();
  55.             KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
  56.             config.setOption( ClockTypeOption.get("pseudo") );
  57.             StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(config, null);
  58.             // go !
  59.             rulesThread mt = new rulesThread(ksession);
  60.             mt.start();
  61.             System.out.println("sending events");
  62.             sendEvents("rawEvents.source", ksession);
  63.             System.out.println("no more events to send");
  64.         } catch (Throwable t) {
  65.             t.printStackTrace();
  66.         }
  67.     }
  68.  
  69.     @SuppressWarnings("restriction")
  70.     private static void sendEvents(String filePath, StatefulKnowledgeSession ksession) {
  71.         try {
  72.             FileInputStream fstream = new FileInputStream(filePath);
  73.             DataInputStream in = new DataInputStream(fstream);
  74.             BufferedReader br = new BufferedReader(new InputStreamReader(in));
  75.             SessionPseudoClock clock = ksession.getSessionClock();
  76.             String strLine;
  77.             //Read File Line By Line
  78.             while ((strLine = br.readLine()) != null)   {
  79.                 RawEvent re = new RawEvent();
  80.                 if (re.parse(strLine)) {
  81.                     clock.advanceTime( re.getTimestamp().getTime() - clock.getCurrentTime() , TimeUnit.MILLISECONDS );
  82.                     ksession.insert(re);
  83.                 }
  84.             }
  85.             fstream.close();
  86.         } catch (FileNotFoundException e) {
  87.             // TODO Auto-generated catch block
  88.             e.printStackTrace();
  89.         } catch (IOException e) {
  90.             // TODO Auto-generated catch block
  91.             e.printStackTrace();
  92.         }
  93.     }
  94.  
  95.     private static KnowledgeBase readKnowledgeBase() throws Exception {
  96.         KnowledgeBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
  97.         config.setOption( EventProcessingOption.STREAM );
  98.         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
  99.         kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL);
  100.         KnowledgeBuilderErrors errors = kbuilder.getErrors();
  101.         if (errors.size() > 0) {
  102.             for (KnowledgeBuilderError error: errors) {
  103.                 System.err.println(error);
  104.             }
  105.             throw new IllegalArgumentException("Could not parse knowledge.");
  106.         }
  107.         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(config);
  108.         kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
  109.         return kbase;
  110.     }
  111.    
  112.     private static long rand(Random r, long s, long e) {
  113.         return (long)((e - s + 1) * r.nextDouble())+s;
  114.     }
  115.    
  116.     private static void generateRawEvents(String filePath) {
  117.         DateFormat formatter = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
  118.         Date startDay = new Date();
  119.         Random  source = new Random();
  120.         long nbscenario = 10;
  121.         ArrayList<RawEvent> list = new ArrayList<RawEvent>();
  122.         for (long curScenar = 0 ; curScenar < nbscenario ; curScenar++) {
  123.             long beg = startDay.getTime()+ rand(source, 1, 1*60*60*24*3) * 1000;
  124.             long end = beg+rand(source, 1, 1*60*60*12/3) * 1000;
  125.             long id = rand(source, 0, 20);
  126.             System.out.println(id);
  127.             while (beg < end) {
  128.                 RawEvent tmp = new RawEvent();
  129.                 tmp.parse("timestamp="+formatter.format(new Date(beg))+", test="+(rand(source, 0, 500) == 0)+", id="+id);
  130.                 list.add(tmp);
  131.                 beg += rand(source, 0, 89) * 1000;
  132.             }
  133.         }
  134.         Collections.sort(list);
  135.         try {
  136.             FileOutputStream sourcefile = new FileOutputStream(filePath, false);
  137.             for (RawEvent s : list) {
  138.                 sourcefile.write((s.toString()+'\n').getBytes());
  139.             }
  140.             sourcefile.close();
  141.         }
  142.         catch (FileNotFoundException e) {
  143.             // TODO Auto-generated catch block
  144.             e.printStackTrace();
  145.         }
  146.         catch (IOException e) {
  147.             // TODO Auto-generated catch block
  148.             e.printStackTrace();
  149.         }
  150.        
  151.     }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement