initial commit of simple monitoring plugin
diff --git a/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.classpath b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.classpath
new file mode 100755
index 0000000..b1dabee
--- /dev/null
+++ b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.gitignore b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.gitignore
new file mode 100755
index 0000000..5e56e04
--- /dev/null
+++ b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.gitignore
@@ -0,0 +1 @@
+/bin
diff --git a/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.project b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.project
new file mode 100755
index 0000000..b634bf1
--- /dev/null
+++ b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.soa.mangrove.monitoring</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.settings/org.eclipse.jdt.core.prefs
new file mode 100755
index 0000000..11f6e46
--- /dev/null
+++ b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/META-INF/MANIFEST.MF b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..5fca354
--- /dev/null
+++ b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Mangrove Monitoring
+Bundle-SymbolicName: org.eclipse.soa.mangrove.monitoring
+Bundle-Version: 0.0.5.qualifier
+Bundle-Activator: org.eclipse.soa.mangrove.monitoring.Activator
+Bundle-Vendor: Xerox
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.soa.mangrove
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.soa.mangrove.monitoring
diff --git a/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/build.properties b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/build.properties
new file mode 100755
index 0000000..41eb6ad
--- /dev/null
+++ b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/Activator.java b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/Activator.java
new file mode 100755
index 0000000..bc350b9
--- /dev/null
+++ b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/Activator.java
@@ -0,0 +1,50 @@
+package org.eclipse.soa.mangrove.monitoring;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.soa.mangrove.monitoring"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/ActivityMonitoringData.java b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/ActivityMonitoringData.java
new file mode 100755
index 0000000..da9149a
--- /dev/null
+++ b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/ActivityMonitoringData.java
@@ -0,0 +1,64 @@
+package org.eclipse.soa.mangrove.monitoring;
+
+/**
+ * @author Adrian Mos
+ * Holder for monitoring data for BPMS activities
+ */
+public class ActivityMonitoringData {
+ public String getProcName() {
+ return procName;
+ }
+ public void setProcName(String procName) {
+ this.procName = procName;
+ }
+ public String getProcID() {
+ return procID;
+ }
+ public void setProcID(String procID) {
+ this.procID = procID;
+ }
+ public String getActivityName() {
+ return activityName;
+ }
+ public void setActivityName(String activityName) {
+ this.activityName = activityName;
+ }
+ public String getGrantedRole() {
+ return grantedRole;
+ }
+ public void setGrantedRole(String grantedRole) {
+ this.grantedRole = grantedRole;
+ }
+ public String getUser() {
+ return user;
+ }
+ public void setUser(String user) {
+ this.user = user;
+ }
+ public long getLastExecTime() {
+ return lastExecTime;
+ }
+ public void setLastExecTime(long l) {
+ this.lastExecTime = l;
+ }
+ public long getAvgExecTime() {
+ return avgExecTime;
+ }
+ public void setAvgExecTime(long l) {
+ this.avgExecTime = l;
+ }
+ public String getTimeStamp() {
+ return timeStamp;
+ }
+ public void setTimeStamp(String timeStamp) {
+ this.timeStamp = timeStamp;
+ }
+ private String procName;
+ private String procID;
+ private String activityName;
+ private String grantedRole;
+ private String user;
+ private long lastExecTime;
+ private long avgExecTime;
+ private String timeStamp;
+}
diff --git a/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/BPMSMonitoringHandler.java b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/BPMSMonitoringHandler.java
new file mode 100755
index 0000000..9b304b0
--- /dev/null
+++ b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/BPMSMonitoringHandler.java
@@ -0,0 +1,226 @@
+package org.eclipse.soa.mangrove.monitoring;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Scanner;
+import java.util.Vector;
+
+/**
+ * @author Adrian Mos
+ * Helper class to deal with monitoring data from BPMS
+ */
+public class BPMSMonitoringHandler {
+
+ String activityFileName = "C:\\XRCE_PushMonitoring_FileStore\\monitoring_Activity.info";
+ String processFileName = "C:\\XRCE_PushMonitoring_FileStore\\monitoring_Process.info";
+ private Path activityFile;
+ private Path processFile;
+ private HashMap<String, ActivityMonitoringData> activityExecMap; //maps activity names composed of ProcessName+ActivityName to activity execution details
+ private HashMap<String, Vector<Long>> activityExecHistoryMap; //maps activity names composed of ProcessName+ActivityName to activity execution history
+ private HashMap<String, ProcessMonitoringData> processExecMap; //maps activity names composed of ProcessName+ActivityName to activity execution details
+ private HashMap<String, Vector<Long>> processExecHistoryMap; //maps activity names composed of ProcessName+ActivityName to activity execution history
+
+
+
+ public BPMSMonitoringHandler() {
+ activityFile = Paths.get(activityFileName);
+ processFile = Paths.get(processFileName);
+ initializeActivityDataStructures();
+ initializeProcessDataStructures();
+ try {
+ processActivityMonitoringFile();
+ processProcessMonitoringFile();
+ } catch (IOException e) {
+ System.err.println("Could not process the monitoring file at " + activityFileName);
+ }
+ try {
+ processProcessMonitoringFile();
+ } catch (IOException e) {
+ System.err.println("Could not process the monitoring file at " + processFileName);
+ }
+
+ }
+
+ private void processProcessMonitoringFile() throws IOException {
+ Scanner s = new Scanner(processFile);
+ initializeProcessDataStructures();
+ while (s.hasNextLine()){
+ ProcessMonitoringData data = processProcessLine (s.nextLine());
+ if (null!=data){
+ processExecMap.put(data.getProcessName(), data);
+ }
+ }
+ s.close();
+ //this.printDataStructures();
+
+ }
+
+ private ProcessMonitoringData processProcessLine(String nextLine) {
+ ProcessMonitoringData data = new ProcessMonitoringData();
+ Scanner ls = new Scanner(nextLine);
+ ls.useDelimiter("::");
+ try{
+ if (ls.hasNext()){
+ data.setProcessName(ls.next());
+ data.setProcID(ls.next());
+
+ // add the list of activities
+ Vector<String> activityNames = new Vector<String>();
+ Scanner aNames = new Scanner(ls.next());
+ aNames.useDelimiter(";");
+ while(aNames.hasNext()) activityNames.add(aNames.next());
+ data.setPerformedActivityNames(activityNames);
+ aNames.close();
+
+ data.setUser(ls.next());
+ data.setLastExecTime(ls.nextLong());
+ data.setAvgExecTime(ls.nextLong());
+ data.setTimeStamp(ls.next());
+
+ String key = data.getProcessName();
+ Vector<Long> v;
+ if (processExecHistoryMap.containsKey(key)) v = processExecHistoryMap.get(key);
+ else v = new Vector<Long>();
+ v.add(data.getLastExecTime());
+ processExecHistoryMap.put(key, v);
+ }
+ } catch (Exception e){
+ data = null;
+ }
+
+ ls.close();
+ return data;
+ }
+
+ private void initializeActivityDataStructures(){
+ activityExecMap = new HashMap<String, ActivityMonitoringData>();
+ activityExecHistoryMap = new HashMap<String, Vector<Long>>();
+ }
+
+ private void initializeProcessDataStructures(){
+ processExecMap = new HashMap<String, ProcessMonitoringData>();
+ processExecHistoryMap = new HashMap<String, Vector<Long>>();
+ }
+
+ public static void main(String[] args) {
+ BPMSMonitoringHandler h = new BPMSMonitoringHandler();
+ try {
+ ActivityMonitoringData d = h.findLatestActivityMonitoringData("TimeSheetBP_1", "ViewTimeSheets");
+ if (null!=d) System.out.println("FOUND Latest Activity Data: " + d.getAvgExecTime());
+ Vector v = h.getActivityExecutionTimes("TimeSheetBP_1", "ViewTimeSheets");
+ System.out.println(v);
+
+ ProcessMonitoringData p = h.findLatestProcessMonitoringData("TimeSheetBP_1");
+ if (null!=p) {
+ System.out.println("FOUND Latest Data: " + p.getAvgExecTime());
+ Vector act = p.getPerformedActivityNames();
+ System.out.println("Executed activities for last instance " + p.getProcID() + ": " + act);
+ }
+ Vector vp = h.getProcessExecutionTimes("TimeSheetBP_1");
+ System.out.println(vp);
+
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ private void processActivityMonitoringFile() throws IOException{
+ Scanner s = new Scanner(activityFile);
+ initializeActivityDataStructures();
+ while (s.hasNextLine()){
+ ActivityMonitoringData data = processActivityLine (s.nextLine());
+ if (null!=data){
+ //System.out.println(data.getActivityName() + " executed in " + data.getLastExecTime() + " at " + data.getTimeStamp());
+ activityExecMap.put(data.getProcName() + "::" + data.getActivityName(), data);
+ }
+ }
+ s.close();
+ //this.printDataStructures();
+ }
+
+ private void printDataStructures(){
+ System.out.println("Printing Activity TO Execution Data HashMap");
+ for (String key : activityExecMap.keySet()){
+ System.out.println("Activity: " + key + " :: "+ activityExecMap.get(key));
+ }
+
+ System.out.println("Printing Activity TO Execution History HashMap");
+ for (String key : activityExecHistoryMap.keySet()){
+ System.out.println("Activity: " + key + " :: "+ activityExecHistoryMap.get(key));
+ }
+
+
+ }
+
+ /**
+ * @param processName
+ * @param activityName
+ * @return the object containing execution details for the last execution of this activity regardless of process instance
+ * @throws IOException
+ */
+ public ActivityMonitoringData findLatestActivityMonitoringData(String processName, String activityName) throws IOException{
+ ActivityMonitoringData data = null;
+ String key = processName + "::" + activityName; //our convention, used also when storing values in the map
+ this.processActivityMonitoringFile(); //updates the contents of the map (only the last values will be stored) due to the nature of the map
+ if (activityExecMap.containsKey(key)) data = activityExecMap.get(key);
+ return data;
+ }
+
+ public Vector<Long> getActivityExecutionTimes(String processName, String activityName) {
+ //System.out.println("LOOKING FOR EXECUTION TIMES FOR ACTIVITY: " + activityName + " IN PROCESS: " + processName);
+ Vector<Long> v = null;
+ String key = processName + "::" + activityName; //our convention, used also when storing values in the map
+ if (activityExecHistoryMap.containsKey(key)) v = activityExecHistoryMap.get(key);
+ //System.out.println("FOUND these values: " + v);
+ return v;
+ }
+
+ public ProcessMonitoringData findLatestProcessMonitoringData(String processName) throws IOException{
+ ProcessMonitoringData data = null;
+ this.processProcessMonitoringFile(); //updates the contents of the map (only the last values will be stored) due to the nature of the map
+ if (processExecMap.containsKey(processName)) data = processExecMap.get(processName);
+ return data;
+ }
+
+ public Vector<Long> getProcessExecutionTimes(String processName) {
+ //System.out.println("LOOKING FOR EXECUTION TIMES FOR PROCESS: " + processName);
+ Vector<Long> v = null;
+ if (processExecHistoryMap.containsKey(processName)) v = processExecHistoryMap.get(processName);
+ //System.out.println("FOUND these values: " + v);
+ return v;
+ }
+
+ private ActivityMonitoringData processActivityLine(String nextLine) {
+ ActivityMonitoringData data = new ActivityMonitoringData();
+ Scanner ls = new Scanner(nextLine);
+ ls.useDelimiter("::");
+ try{
+ if (ls.hasNext()){
+ data.setProcName(ls.next());
+ data.setProcID(ls.next());
+ data.setActivityName(ls.next());
+ data.setGrantedRole(ls.next());
+ data.setUser(ls.next());
+ data.setLastExecTime(ls.nextLong());
+ data.setAvgExecTime(ls.nextLong());
+ data.setTimeStamp(ls.next());
+
+ String key = data.getProcName() + "::" + data.getActivityName(); //our convention, used also when storing values in the map
+ Vector<Long> v;
+ if (activityExecHistoryMap.containsKey(key)) v = activityExecHistoryMap.get(key);
+ else v = new Vector<Long>();
+ v.add(data.getLastExecTime());
+ activityExecHistoryMap.put(key, v);
+ }
+ } catch (Exception e){
+ data = null;
+ }
+
+ ls.close();
+ return data;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/ProcessMonitoringData.java b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/ProcessMonitoringData.java
new file mode 100755
index 0000000..efbaa05
--- /dev/null
+++ b/org.eclipse.soa.mangrove.roots/trunk/org.eclipse.soa.mangrove.monitoring/src/org/eclipse/soa/mangrove/monitoring/ProcessMonitoringData.java
@@ -0,0 +1,59 @@
+package org.eclipse.soa.mangrove.monitoring;
+
+import java.util.Vector;
+
+/**
+ * @author Adrian Mos
+ * Holder for monitoring data for BPMS processes
+ */
+public class ProcessMonitoringData {
+ public String getProcessName() {
+ return procName;
+ }
+ public void setProcessName(String procName) {
+ this.procName = procName;
+ }
+ public String getProcID() {
+ return procID;
+ }
+ public void setProcID(String procID) {
+ this.procID = procID;
+ }
+ public Vector<String> getPerformedActivityNames() {
+ return performedActivityNames;
+ }
+ public void setPerformedActivityNames(Vector<String> performedAactivityNames) {
+ this.performedActivityNames = performedAactivityNames;
+ }
+ public String getUser() {
+ return user;
+ }
+ public void setUser(String user) {
+ this.user = user;
+ }
+ public long getLastExecTime() {
+ return lastExecTime;
+ }
+ public void setLastExecTime(long lastExecTime) {
+ this.lastExecTime = lastExecTime;
+ }
+ public long getAvgExecTime() {
+ return avgExecTime;
+ }
+ public void setAvgExecTime(long avgExecTime) {
+ this.avgExecTime = avgExecTime;
+ }
+ public String getTimeStamp() {
+ return timeStamp;
+ }
+ public void setTimeStamp(String timeStamp) {
+ this.timeStamp = timeStamp;
+ }
+ private String procName;
+ private String procID;
+ private Vector<String> performedActivityNames;
+ private String user;
+ private long lastExecTime;
+ private long avgExecTime;
+ private String timeStamp;
+}