Author: heiko.braun(a)jboss.com
Date: 2010-03-10 09:22:19 -0500 (Wed, 10 Mar 2010)
New Revision: 997
Added:
activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Timespan.java
Modified:
activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/BPAFDataSource.java
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/Metrics.java
Log:
Added fixed timespan's
Modified:
activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/BPAFDataSource.java
===================================================================
---
activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/BPAFDataSource.java 2010-03-10
13:07:43 UTC (rev 996)
+++
activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/BPAFDataSource.java 2010-03-10
14:22:19 UTC (rev 997)
@@ -22,6 +22,7 @@
package org.jboss.bpm.monitor.model;
import org.jboss.bpm.monitor.model.bpaf.Event;
+import org.jboss.bpm.monitor.model.metric.Timespan;
import java.util.List;
@@ -31,10 +32,56 @@
*/
public interface BPAFDataSource
{
+ /**
+ * Get a list of distinct process definition ID's that are known to the system.
+ * @return a collection of process definition ID's
+ */
List<String> getProcessDefinitions();
+
+ /**
+ * Get a list of distinct process instance ID's that are known to the system.
+ * @return a collection of process instance ID's
+ */
+
List<String> getProcessInstances(String processDefinition);
+
+ /**
+ * Get a list of distinct activity definition ID's that are known to the system.
+ * @return a collection of activity definition ID's
+ */
+
List<String> getActivityDefinitions(String processInstance);
- List<Event> getDefinitionEvents(String processDefinition, long start, long end);
- List<Event> getInstanceEvents(String processInstance, long start, long end);
+ /**
+ * Get a list of process definition events for a specific timespan.
+ * Process definition events are the ones that don't have and activityDefinition
+ * assigned to them. These events are typically used to indicated start and end of an
+ * process instance lifecycle.
+ * <p/>
+ * NOTE: Parity is important <code>(events.size()%2==0)</code>.
+ * Only return result sets that include matching State.Close events.
+ * Otherwise you include instances that are still running.
+ *
+ * @param processDefinition the process definition ID
+ * @param timespan a timespan (inclusive)
+ * @return List of <tt>State.Open</tt> and
<tt>State.Closed</tt> events for a particluar process definition
+ * excluding the activity events (<tt>activityDefinitionID is null</tt>)
+ */
+ List<Event> getDefinitionEvents(String processDefinition, Timespan timespan);
+
+
+ /**
+ * Get a list of process instance events for specific timespan.
+ * Process instance event are the one that have an activity assigned to it.
+ *
+ * <p/>
+ * NOTE: Parity is important <code>(events.size()%2==0)</code>.
+ * Only return result sets that include matching State.Close events.
+ * Otherwise you include activities that are still running.
+ *
+ * @param processInstance the process instance ID
+ * @param timespan a timespan (inclusive)
+ * @return a list of instance activity events.
+ */
+ List<Event> getInstanceEvents(String processInstance, Timespan timespan);
}
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
13:07:43 UTC (rev 996)
+++
activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/DefaultBPAFDataSource.java 2010-03-10
14:22:19 UTC (rev 997)
@@ -28,6 +28,7 @@
import org.hibernate.criterion.Restrictions;
import org.jboss.bpm.monitor.model.bpaf.Event;
import org.jboss.bpm.monitor.model.hibernate.HibernateUtil;
+import org.jboss.bpm.monitor.model.metric.Timespan;
import java.util.List;
@@ -115,8 +116,8 @@
return result;
}
- public List<Event> getDefinitionEvents(final String processDefinition, long
start, long end)
- {
+ public List<Event> getDefinitionEvents(final String processDefinition, final
Timespan timespan)
+ {
List<Event> result = executeCommand(new SQLCommand<List<Event>>()
{
public List<Event> execute(Session session)
@@ -130,6 +131,8 @@
"and e1.activityDefinitionID is null " +
"and e2.activityDefinitionID is null " +
"and e1.processDefinitionID='"+processDefinition+"'
"+
+ "and e1.timeStamp>="+timespan.getStart()+" "+
+ "and e2.timeStamp<="+timespan.getEnd()+" "+
"order by e1.timeStamp;");
query.addEntity(Event.class);
@@ -141,7 +144,7 @@
return result;
}
- public List<Event> getInstanceEvents(final String processInstance, long start,
long end)
+ public List<Event> getInstanceEvents(final String processInstance, Timespan
timespan)
{
List<Event> result = executeCommand(new SQLCommand<List<Event>>()
{
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
13:07:43 UTC (rev 996)
+++
activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/Runner.java 2010-03-10
14:22:19 UTC (rev 997)
@@ -23,6 +23,7 @@
import org.jboss.bpm.monitor.model.bpaf.Event;
import org.jboss.bpm.monitor.model.metric.Metrics;
+import org.jboss.bpm.monitor.model.metric.Timespan;
import java.util.List;
@@ -53,12 +54,14 @@
// definition events
- List<Event> defLifecycle = ds.getDefinitionEvents(definitions.get(0), 0, 0);
+ 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));
// instance events
- List<Event> instLifecycle = ds.getInstanceEvents(instances.get(0), 0, 0);
- System.out.println(instLifecycle);
+ List<Event> instLifecycle = ds.getInstanceEvents(instances.get(0), timespan);
+ System.out.println(instLifecycle);
}
}
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
13:07:43 UTC (rev 996)
+++
activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Metrics.java 2010-03-10
14:22:19 UTC (rev 997)
@@ -35,7 +35,7 @@
{
public static Average getAverage(List<Event> events)
{
- assert events.size()>0;
+ 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(events.get(0).getProcessDefinitionID());
Added:
activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Timespan.java
===================================================================
---
activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Timespan.java
(rev 0)
+++
activity-monitor/trunk/model/src/main/java/org/jboss/bpm/monitor/model/metric/Timespan.java 2010-03-10
14:22:19 UTC (rev 997)
@@ -0,0 +1,209 @@
+/*
jboss.org */
+package org.jboss.bpm.monitor.model.metric;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * @author: Heiko Braun <hbraun(a)redhat.com>
+ * @date: Mar 10, 2010
+ */
+public final class Timespan
+{
+ long start;
+ long end;
+
+ public Timespan(long start, long end)
+ {
+ this.start = start;
+ this.end = end;
+ }
+
+ public long getStart()
+ {
+ return start;
+ }
+
+ public long getEnd()
+ {
+ return end;
+ }
+
+ public String toString()
+ {
+ return "Timespan{ "+new Date(start)+" - "+new Date(end)+"
}";
+ }
+
+ // ----------------------------------------
+
+ public static Timespan last24Hours()
+ {
+ Calendar cal = Calendar.getInstance();
+ long t1 = cal.getTimeInMillis();
+
+ cal.roll(Calendar.DAY_OF_YEAR, -1);
+ long t0 = cal.getTimeInMillis();
+
+ return new Timespan(t0, t1);
+ }
+
+ public static Timespan lastDay()
+ {
+ Calendar cal = Calendar.getInstance();
+
+ cal.roll(Calendar.DAY_OF_YEAR, -1);
+ cal.set(Calendar.HOUR_OF_DAY, 23);
+ cal.set(Calendar.MINUTE, 59);
+ cal.set(Calendar.SECOND, 59);
+ long t1 = cal.getTimeInMillis();
+
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ long t0 = cal.getTimeInMillis();
+
+ return new Timespan(t0, t1);
+ }
+
+ public static Timespan last7Days()
+ {
+ Calendar cal = Calendar.getInstance();
+ long t1 = cal.getTimeInMillis();
+
+ cal.roll(Calendar.DAY_OF_YEAR, -7);
+ long t0 = cal.getTimeInMillis();
+
+ return new Timespan(t0, t1);
+ }
+
+ public static Timespan lastWeek()
+ {
+ Calendar cal = Calendar.getInstance();
+
+ cal.roll(Calendar.WEEK_OF_YEAR, -1);
+
+ cal.set(Calendar.DAY_OF_WEEK, 7);
+ cal.set(Calendar.HOUR_OF_DAY, 23);
+ cal.set(Calendar.MINUTE, 59);
+ cal.set(Calendar.SECOND, 59);
+ long t1 = cal.getTimeInMillis();
+
+ cal.set(Calendar.DAY_OF_WEEK, 0);
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ long t0 = cal.getTimeInMillis();
+
+ return new Timespan(t0, t1);
+ }
+
+ public static Timespan last4Weeks()
+ {
+ Calendar cal = Calendar.getInstance();
+ long t1 = cal.getTimeInMillis();
+
+ cal.roll(Calendar.WEEK_OF_YEAR, -4);
+ long t0 = cal.getTimeInMillis();
+
+ return new Timespan(t0, t1);
+ }
+
+ public static Timespan lastMonth()
+ {
+ Calendar cal = Calendar.getInstance();
+
+ cal.roll(Calendar.MONTH, -1);
+
+ cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+ cal.set(Calendar.HOUR_OF_DAY, 23);
+ cal.set(Calendar.MINUTE, 59);
+ cal.set(Calendar.SECOND, 59);
+ long t1 = cal.getTimeInMillis();
+
+ cal.set(Calendar.DAY_OF_MONTH, 1);
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ long t0 = cal.getTimeInMillis();
+
+ return new Timespan(t0, t1);
+ }
+
+
+ public static Timespan last3Month()
+ {
+ Calendar cal = Calendar.getInstance();
+ long t1 = cal.getTimeInMillis();
+
+ cal.roll(Calendar.MONTH, -3);
+ long t0 = cal.getTimeInMillis();
+
+ return new Timespan(t0, t1);
+ }
+
+ public static Timespan lastQuarter()
+ {
+ Calendar cal = Calendar.getInstance();
+
+ long currentMonth = cal.get(Calendar.MONTH);
+
+ if(currentMonth>=1 && currentMonth<=3)
+ cal.set(Calendar.MONTH, Calendar.MARCH);
+ else if(currentMonth>=4 && currentMonth<=6)
+ cal.set(Calendar.MONTH, Calendar.JUNE);
+ else if(currentMonth>=7 && currentMonth<=9)
+ cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
+ else
+ cal.set(Calendar.MONTH, Calendar.DECEMBER);
+
+ cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+ cal.set(Calendar.HOUR_OF_DAY, 23);
+ cal.set(Calendar.MINUTE, 59);
+ cal.set(Calendar.SECOND, 59);
+ long t1 = cal.getTimeInMillis();
+
+ cal.roll(Calendar.MONTH, -2);
+ cal.set(Calendar.DAY_OF_MONTH, 1);
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ long t0 = cal.getTimeInMillis();
+
+ return new Timespan(t0, t1);
+ }
+
+
+ public static Timespan last12Month()
+ {
+ Calendar cal = Calendar.getInstance();
+ long t1 = cal.getTimeInMillis();
+
+ cal.roll(Calendar.YEAR, -1);
+ long t0 = cal.getTimeInMillis();
+
+ return new Timespan(t0, t1);
+ }
+
+ public static Timespan lastYear()
+ {
+ Calendar cal = Calendar.getInstance();
+
+ cal.roll(Calendar.YEAR, -1);
+
+ cal.set(Calendar.MONTH, Calendar.DECEMBER);
+ cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+ cal.set(Calendar.HOUR_OF_DAY, 23);
+ cal.set(Calendar.MINUTE, 59);
+ cal.set(Calendar.SECOND, 59);
+ long t1 = cal.getTimeInMillis();
+
+ cal.set(Calendar.MONTH, Calendar.JANUARY);
+ cal.set(Calendar.DAY_OF_MONTH, 1);
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ long t0 = cal.getTimeInMillis();
+
+ return new Timespan(t0, t1);
+ }
+}