From 43f27c9d35f21c71c43aa4bc05c06492c255e9c2 Mon Sep 17 00:00:00 2001 From: Christian Wulf <chw@informatik.uni-kiel.de> Date: Thu, 20 Aug 2015 18:21:14 +0200 Subject: [PATCH] added logging of runnables (experimental) --- .../teetime/framework/AbstractRunnableStage.java | 12 ++++++++++++ .../distributor/strategy/RoundRobinStrategy2.java | 2 ++ 2 files changed, 14 insertions(+) diff --git a/src/main/java/teetime/framework/AbstractRunnableStage.java b/src/main/java/teetime/framework/AbstractRunnableStage.java index 01bed6df..d40c278d 100644 --- a/src/main/java/teetime/framework/AbstractRunnableStage.java +++ b/src/main/java/teetime/framework/AbstractRunnableStage.java @@ -15,19 +15,28 @@ */ package teetime.framework; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import teetime.framework.exceptionHandling.TerminateException; +import teetime.util.StopWatch; abstract class AbstractRunnableStage implements Runnable { private static final String TERMINATING_THREAD_DUE_TO_THE_FOLLOWING_EXCEPTION = "Terminating thread due to the following exception: "; + private final StopWatch stopWatch = new StopWatch(); + protected final Stage stage; @SuppressWarnings("PMD.LoggerIsNotStaticFinal") protected final Logger logger; + public static final Map<Stage, Long> durationsInNs = Collections.synchronizedMap(new LinkedHashMap<Stage, Long>()); + protected AbstractRunnableStage(final Stage stage) { if (stage == null) { throw new IllegalArgumentException("Argument stage may not be null"); @@ -50,6 +59,7 @@ abstract class AbstractRunnableStage implements Runnable { if (stage.getOwningContext() == null) { throw new IllegalArgumentException("Argument stage may not have a nullable owning context"); } + stopWatch.start(); try { while (!stage.shouldBeTerminated()) { executeStage(); @@ -58,6 +68,8 @@ abstract class AbstractRunnableStage implements Runnable { stage.abort(); stage.getOwningContext().abortConfigurationRun(); } finally { + stopWatch.end(); + durationsInNs.put(stage, stopWatch.getDurationInNs()); afterStageExecution(); } diff --git a/src/main/java/teetime/stage/basic/distributor/strategy/RoundRobinStrategy2.java b/src/main/java/teetime/stage/basic/distributor/strategy/RoundRobinStrategy2.java index 9dd7e4db..ba6c4ec9 100644 --- a/src/main/java/teetime/stage/basic/distributor/strategy/RoundRobinStrategy2.java +++ b/src/main/java/teetime/stage/basic/distributor/strategy/RoundRobinStrategy2.java @@ -21,6 +21,8 @@ import teetime.framework.OutputPort; import teetime.stage.basic.distributor.Distributor; /** + * Backoff strategy + * * @author Christian Wulf * * @since 1.1 -- GitLab