From 75f527b27a8d03d336054a4d2759baa1b9024aa5 Mon Sep 17 00:00:00 2001
From: Nils Christian Ehmke <nie@informatik.uni-kiel.de>
Date: Tue, 3 Feb 2015 16:24:32 +0100
Subject: [PATCH] Added mean value to the statistics

---
 .../domain/AggregatedOperationCall.java       |  9 ++++++++
 .../AggregatedTraceStatisticsDecorator.java   |  8 +++++++
 .../subview/aggregatedtraces/View.java        | 22 +++++++++++++++++--
 .../util/MeanDurationSortListener.java        | 18 +++++++++++++++
 4 files changed, 55 insertions(+), 2 deletions(-)
 create mode 100644 src/main/java/kieker/diagnosis/subview/aggregatedtraces/util/MeanDurationSortListener.java

diff --git a/src/main/java/kieker/diagnosis/common/domain/AggregatedOperationCall.java b/src/main/java/kieker/diagnosis/common/domain/AggregatedOperationCall.java
index 0d8447ea..da68e810 100644
--- a/src/main/java/kieker/diagnosis/common/domain/AggregatedOperationCall.java
+++ b/src/main/java/kieker/diagnosis/common/domain/AggregatedOperationCall.java
@@ -19,6 +19,7 @@ package kieker.diagnosis.common.domain;
 public final class AggregatedOperationCall extends AbstractOperationCall<AggregatedOperationCall> {
 
 	private long totalDuration;
+	private long meanDuration;
 	private long minDuration;
 	private long maxDuration;
 	private long avgDuration;
@@ -43,6 +44,14 @@ public final class AggregatedOperationCall extends AbstractOperationCall<Aggrega
 		this.totalDuration = totalDuration;
 	}
 
+	public long getMeanDuration() {
+		return this.meanDuration;
+	}
+
+	public void setMeanDuration(final long meanDuration) {
+		this.meanDuration = meanDuration;
+	}
+
 	public long getMinDuration() {
 		return this.minDuration;
 	}
diff --git a/src/main/java/kieker/diagnosis/common/model/importer/stages/AggregatedTraceStatisticsDecorator.java b/src/main/java/kieker/diagnosis/common/model/importer/stages/AggregatedTraceStatisticsDecorator.java
index 665d1db4..8cdcf080 100644
--- a/src/main/java/kieker/diagnosis/common/model/importer/stages/AggregatedTraceStatisticsDecorator.java
+++ b/src/main/java/kieker/diagnosis/common/model/importer/stages/AggregatedTraceStatisticsDecorator.java
@@ -17,6 +17,7 @@
 package kieker.diagnosis.common.model.importer.stages;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import kieker.diagnosis.common.domain.AggregatedOperationCall;
@@ -86,6 +87,7 @@ public final class AggregatedTraceStatisticsDecorator extends AbstractStage<Aggr
 			rootOperationCall.setMaxDuration(this.findMaxDuration(durationsOfCurrentEdge));
 			rootOperationCall.setAvgDuration(this.calculateAvgDuration(durationsOfCurrentEdge));
 			rootOperationCall.setTotalDuration(this.calculateTotalDuration(durationsOfCurrentEdge));
+			rootOperationCall.setMeanDuration(this.calculateMeanDuration(durationsOfCurrentEdge));
 
 			for (final AggregatedOperationCall child : rootOperationCall.getChildren()) {
 				this.addDurationStatistics(child);
@@ -132,6 +134,12 @@ public final class AggregatedTraceStatisticsDecorator extends AbstractStage<Aggr
 			return totalDuration;
 		}
 
+		private long calculateMeanDuration(final List<Long> durationsOfCurrentEdge) {
+			Collections.sort(durationsOfCurrentEdge);
+
+			return durationsOfCurrentEdge.get(durationsOfCurrentEdge.size() / 2);
+		}
+
 	}
 
 }
diff --git a/src/main/java/kieker/diagnosis/subview/aggregatedtraces/View.java b/src/main/java/kieker/diagnosis/subview/aggregatedtraces/View.java
index 89fa271a..338ddbec 100644
--- a/src/main/java/kieker/diagnosis/subview/aggregatedtraces/View.java
+++ b/src/main/java/kieker/diagnosis/subview/aggregatedtraces/View.java
@@ -27,6 +27,7 @@ import kieker.diagnosis.subview.ISubView;
 import kieker.diagnosis.subview.aggregatedtraces.util.AvgDurationSortListener;
 import kieker.diagnosis.subview.aggregatedtraces.util.CallsSortListener;
 import kieker.diagnosis.subview.aggregatedtraces.util.MaxDurationSortListener;
+import kieker.diagnosis.subview.aggregatedtraces.util.MeanDurationSortListener;
 import kieker.diagnosis.subview.aggregatedtraces.util.MinDurationSortListener;
 import kieker.diagnosis.subview.aggregatedtraces.util.TotalDurationSortListener;
 import kieker.diagnosis.subview.util.ComponentSortListener;
@@ -64,6 +65,7 @@ public final class View implements Observer, ISubView {
 	private Label lblNumberOfCallsDisplay;
 	private Label lblMinimalDurationDisplay;
 	private Label lblAverageDurationDisplay;
+	private Label lblMeanDurationDisplay;
 	private Label lblMaximalDurationDisplay;
 	private Label lblFailedDisplay;
 	private Label lblTraceDepthDisplay;
@@ -134,6 +136,10 @@ public final class View implements Observer, ISubView {
 		trclmnAverageDuration.setWidth(100);
 		trclmnAverageDuration.setText("Average Duration");
 
+		final TreeColumn trclmnMeanDuration = new TreeColumn(this.tree, SWT.RIGHT);
+		trclmnMeanDuration.setWidth(100);
+		trclmnMeanDuration.setText("Mean Duration");
+
 		final TreeColumn trclmnMaximalDuration = new TreeColumn(this.tree, SWT.RIGHT);
 		trclmnMaximalDuration.setWidth(100);
 		trclmnMaximalDuration.setText("Maximal Duration");
@@ -194,6 +200,14 @@ public final class View implements Observer, ISubView {
 		this.lblAverageDurationDisplay.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
 		this.lblAverageDurationDisplay.setText(View.N_A);
 
+		final Label lblMeanDuration = new Label(this.detailComposite, SWT.NONE);
+		lblMeanDuration.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		lblMeanDuration.setText("Mean Duration:");
+
+		this.lblMeanDurationDisplay = new Label(this.detailComposite, SWT.NONE);
+		this.lblMeanDurationDisplay.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		this.lblMeanDurationDisplay.setText(View.N_A);
+
 		final Label lblMaximalDuration = new Label(this.detailComposite, SWT.NONE);
 		lblMaximalDuration.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
 		lblMaximalDuration.setText("Maximal Duration:");
@@ -250,6 +264,7 @@ public final class View implements Observer, ISubView {
 		trclmnMinimalDuration.addSelectionListener(new MinDurationSortListener());
 		trclmnMaximalDuration.addSelectionListener(new MaxDurationSortListener());
 		trclmnAverageDuration.addSelectionListener(new AvgDurationSortListener());
+		trclmnMeanDuration.addSelectionListener(new MeanDurationSortListener());
 		trclmnCalls.addSelectionListener(new CallsSortListener());
 		trclmnTotalDuration.addSelectionListener(new TotalDurationSortListener());
 	}
@@ -300,12 +315,14 @@ public final class View implements Observer, ISubView {
 
 		final String minDuration = (call.getMinDuration() + " " + this.model.getShortTimeUnit()).trim();
 		final String maxDuration = (call.getMaxDuration() + " " + this.model.getShortTimeUnit()).trim();
+		final String meanDuration = (call.getMeanDuration() + " " + this.model.getShortTimeUnit()).trim();
 		final String avgDuration = (call.getAvgDuration() + " " + this.model.getShortTimeUnit()).trim();
 		final String totalDuration = (call.getTotalDuration() + " " + this.model.getShortTimeUnit()).trim();
 
 		this.lblMinimalDurationDisplay.setText(minDuration);
 		this.lblMaximalDurationDisplay.setText(maxDuration);
 		this.lblAverageDurationDisplay.setText(avgDuration);
+		this.lblMeanDurationDisplay.setText(meanDuration);
 		this.lblTotalDurationDisplay.setText(totalDuration);
 
 		this.lblExecutionContainerDisplay.setText(call.getContainer());
@@ -366,13 +383,14 @@ public final class View implements Observer, ISubView {
 			final String minDuration = (operationCall.getMinDuration() + " " + View.this.model.getShortTimeUnit()).trim();
 			final String maxDuration = (operationCall.getMaxDuration() + " " + View.this.model.getShortTimeUnit()).trim();
 			final String avgDuration = (operationCall.getAvgDuration() + " " + View.this.model.getShortTimeUnit()).trim();
+			final String meanDuration = (operationCall.getMeanDuration() + " " + View.this.model.getShortTimeUnit()).trim();
 			final String totalDuration = (operationCall.getTotalDuration() + " " + View.this.model.getShortTimeUnit()).trim();
 
 			if (parent != null) {
-				item.setText(new String[] { operationCall.getContainer(), componentName, operationString, "", minDuration, avgDuration, maxDuration, totalDuration, });
+				item.setText(new String[] { operationCall.getContainer(), componentName, operationString, "", minDuration, avgDuration, meanDuration, maxDuration, totalDuration, });
 			} else {
 				item.setText(new String[] { operationCall.getContainer(), componentName, operationString, Integer.toString(operationCall.getCalls()), minDuration, avgDuration,
-					maxDuration, totalDuration, });
+					meanDuration, maxDuration, totalDuration, });
 			}
 
 			if (operationCall.isFailed()) {
diff --git a/src/main/java/kieker/diagnosis/subview/aggregatedtraces/util/MeanDurationSortListener.java b/src/main/java/kieker/diagnosis/subview/aggregatedtraces/util/MeanDurationSortListener.java
new file mode 100644
index 00000000..ef79e403
--- /dev/null
+++ b/src/main/java/kieker/diagnosis/subview/aggregatedtraces/util/MeanDurationSortListener.java
@@ -0,0 +1,18 @@
+package kieker.diagnosis.subview.aggregatedtraces.util;
+
+import kieker.diagnosis.common.domain.AggregatedTrace;
+import kieker.diagnosis.subview.util.AbstractTraceTreeColumnSortListener;
+
+public final class MeanDurationSortListener extends AbstractTraceTreeColumnSortListener<AggregatedTrace> {
+
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	protected int compare(final AggregatedTrace fstTrace, final AggregatedTrace sndTrace) {
+		final long fstMeanDuration = fstTrace.getRootOperationCall().getMeanDuration();
+		final long sndMeanDuration = sndTrace.getRootOperationCall().getMeanDuration();
+
+		return Long.compare(fstMeanDuration, sndMeanDuration);
+	}
+
+}
-- 
GitLab