[overlord-commits] Overlord SVN: r998 - in activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model: metric and 1 other directory.

overlord-commits at lists.jboss.org overlord-commits at lists.jboss.org
Wed Mar 10 10:00:08 EST 2010


Author: heiko.braun at jboss.com
Date: 2010-03-10 10:00:07 -0500 (Wed, 10 Mar 2010)
New Revision: 998

Modified:
   activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/DefaultBPAFDataSource.java
   activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/Runner.java
   activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Average.java
   activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Metrics.java
Log:
implement activty selection 

Modified: activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/DefaultBPAFDataSource.java
===================================================================
--- activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/DefaultBPAFDataSource.java	2010-03-10 14:22:19 UTC (rev 997)
+++ activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/DefaultBPAFDataSource.java	2010-03-10 15:00:07 UTC (rev 998)
@@ -144,16 +144,27 @@
     return result;
   }
 
-  public List<Event> getInstanceEvents(final String processInstance, Timespan timespan)
+  public List<Event> getInstanceEvents(final String processInstance, final Timespan timespan)
   {
     List<Event> result = executeCommand(new SQLCommand<List<Event>>()
     {
       public List<Event> execute(Session session)
       {
-        Criteria c = session.createCriteria(Event.class);
-        c.add(Restrictions.isNotNull("activityDefinitionID"));
-        c.add(Restrictions.eq("processInstanceID", processInstance));
-        return c.list();
+        SQLQuery query = session.createSQLQuery("select e1.*\n" +
+            "from BPAF_EVENT e1, BPAF_EVENT e2\n" +
+            "where e1.processInstanceID=e2.processInstanceID\n" +
+            "and ((e1.currentState=\"Open\" and e2.currentState=\"Closed\") OR (e2.currentState=\"Open\" and e1.currentState=\"Closed\"))\n" +
+            "and e1.activityDefinitionID is not null\n" +
+            "and e2.activityDefinitionID is not null\n" +
+            "and e1.processInstanceID='"+processInstance+"' "+
+            "and e1.timeStamp>="+timespan.getStart()+" "+
+            "and e2.timeStamp<="+timespan.getEnd()+" "+
+            "group by e1.activityInstanceID\n" +
+            "order by e1.timeStamp, e1.processInstanceID");
+
+        query.addEntity(Event.class);
+        
+        return query.list();
       }
     });
 

Modified: activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/Runner.java
===================================================================
--- activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/Runner.java	2010-03-10 14:22:19 UTC (rev 997)
+++ activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/Runner.java	2010-03-10 15:00:07 UTC (rev 998)
@@ -56,12 +56,17 @@
     // definition events
     Timespan timespan = Timespan.lastQuarter();
     System.out.println(timespan);
-    List<Event> defLifecycle = ds.getDefinitionEvents(definitions.get(0), timespan);
-    System.out.println("defLifecycle events: " +defLifecycle.size());
-    System.out.println("Stat for definition: " + Metrics.getAverage(defLifecycle));
+    List<Event> instanceHistory = ds.getDefinitionEvents(definitions.get(0), timespan);
+    System.out.println(Metrics.getInstanceAverage(instanceHistory));
 
     // instance events
-    List<Event> instLifecycle = ds.getInstanceEvents(instances.get(0), timespan);
-    System.out.println(instLifecycle);    
+    String instance = instances.get(0);
+    List<Event> activityHistory = ds.getInstanceEvents(instance, timespan);
+    System.out.println("Instance events: "+activityHistory.size());
+
+    for(String s : activities)
+    {
+      System.out.println("- "+s+": " + Metrics.getActivityAverage(activityHistory, s));
+    }
   }
 }

Modified: activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Average.java
===================================================================
--- activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Average.java	2010-03-10 14:22:19 UTC (rev 997)
+++ activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Average.java	2010-03-10 15:00:07 UTC (rev 998)
@@ -27,14 +27,14 @@
  */
 public class Average
 {
-  String processDefinition;
+  String key;
   long min = -1;
   long max = -1;
   long avg = -1;
 
-  public Average(String processDefinition)
+  public Average(String key)
   {
-    this.processDefinition = processDefinition;
+    this.key = key;
   }
 
   public long getMin()

Modified: activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Metrics.java
===================================================================
--- activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Metrics.java	2010-03-10 14:22:19 UTC (rev 997)
+++ activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Metrics.java	2010-03-10 15:00:07 UTC (rev 998)
@@ -33,7 +33,7 @@
  */
 public class Metrics
 {
-  public static Average getAverage(List<Event> events)
+  public static Average getInstanceAverage(List<Event> events)
   {
     assert events.size()>0 : "Empty event list";
     assert events.size()%2==0 : "Parity error: "+events.size() +" events. Every event should have closing counterpart!";
@@ -74,7 +74,59 @@
     }
 
     stat.setAvg(sum/duration.entrySet().size());
-    
+
     return stat;
   }
+
+  public static Average getActivityAverage(List<Event> events, String activityDefinition)
+  {
+    assert events.size()>0 : "Empty event list";
+    assert events.size()%2==0 : "Parity error: "+events.size() +" events. Every event should have closing counterpart!";
+
+    Average stat = new Average(activityDefinition);
+
+    Map<String, Long> duration = new HashMap<String,Long>(events.size()/2);
+    for(Event e : events)
+    {
+      String activity = e.getActivityDefinitionID();
+
+      if(!activity.equals(activityDefinition)) // skip non related events
+        continue;
+      
+      Long l0 = duration.get(activity);
+      if(l0!=null)
+      {
+        long l1 = e.getTimestamp();
+        if(l0<l1)
+          duration.put(activity, (l1-l0));   // not necessarily in order
+        else
+          duration.put(activity, (l0-l1));
+      }
+      else
+      {
+        duration.put(activity, e.getTimestamp());
+      }
+    }
+
+    long sum = 0;
+    for(String activity : duration.keySet())
+    {
+      long l3 = duration.get(activity);
+      if(stat.getMin()==-1) // first iteration
+      {
+        stat.setMin(l3);
+        stat.setMax(l3);
+      }
+      else if(l3<stat.getMin())
+        stat.setMin(l3);
+      else if(l3>stat.getMax())
+        stat.setMax(l3);
+
+      sum+=l3;
+    }
+
+    stat.setAvg(sum/duration.entrySet().size());
+
+    return stat;
+  }
 }



More information about the overlord-commits mailing list