From be793a72fefdb4a8ca09a5305a97880a0ae311d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Henning?= <stu114708@informatik.uni-kiel.de> Date: Tue, 17 May 2016 16:47:31 +0200 Subject: [PATCH] worked on dependency graphs --- .../analysis/TraceAnalysisConfiguration.java | 14 ++-- .../ComponentStatisticsDecoratorStage.java | 45 ++++++++++++ .../ContainerStatisticsDecoratorStage.java | 45 ++++++++++++ .../dev/DependencyStatisticsDecorator.java | 1 + .../DependencyStatisticsDecoratorStage.java | 1 + ...OperationsDependencyGraphCreatorStage.java | 72 +++++++++++++++++++ .../OperationsStatisticsDecoratorStage.java | 1 + 7 files changed, 173 insertions(+), 6 deletions(-) create mode 100644 src/main/java/kieker/analysis/dev/ComponentStatisticsDecoratorStage.java create mode 100644 src/main/java/kieker/analysis/dev/ContainerStatisticsDecoratorStage.java create mode 100644 src/main/java/kieker/analysis/dev/OperationsDependencyGraphCreatorStage.java diff --git a/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java b/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java index 926355a1..876161ca 100644 --- a/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java +++ b/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java @@ -5,6 +5,7 @@ package kieker.analysis; import java.io.File; +import kieker.analysis.dev.OperationsStatisticsDecoratorStage; import kieker.analysis.dev.SoftwareSystemCreatorStage; import kieker.analysis.domain.AggregatedTrace; import kieker.analysis.domain.Trace; @@ -89,20 +90,21 @@ public class TraceAnalysisConfiguration extends Configuration { super.connectPorts(graphDistributor2.getNewOutputPort(), dotTraceGraphFileWriterStage2.getInputPort()); SoftwareSystemCreatorStage softwareSystemCreator = new SoftwareSystemCreatorStage(); + OperationsStatisticsDecoratorStage operationsStatisticsDecorator = new OperationsStatisticsDecoratorStage(); + Distributor<SoftwareSystem> softwareSystemDistributor = new Distributor<>(new CopyByReferenceStrategy()); + // ComponentStatisticsDecoratorStage componentsStatisticsDecorator = new ComponentStatisticsDecoratorStage(); + // ContainerStatisticsDecoratorStage containersStatisticsDecorator = new ContainerStatisticsDecoratorStage(); super.connectPorts(aggregatedTraceDistributor.getNewOutputPort(), softwareSystemCreator.getInputPort()); - super.connectPorts(softwareSystemCreator.getOutputPort(), new AbstractConsumerStage<SoftwareSystem>() { + super.connectPorts(softwareSystemCreator.getOutputPort(), operationsStatisticsDecorator.getInputPort()); + super.connectPorts(operationsStatisticsDecorator.getOutputPort(), softwareSystemDistributor.getInputPort()); + super.connectPorts(softwareSystemDistributor.getNewOutputPort(), new AbstractConsumerStage<SoftwareSystem>() { @Override protected void execute(final SoftwareSystem softwareSystem) { System.out.println(softwareSystem); } }.getInputPort()); - // DependencyCreatorStage dependencyCreatorStage = new DependencyCreatorStage(); - // DependencyStatisticsDecoratorStage dependencyStatisticsDecoratorStage = new DependencyStatisticsDecoratorStage(); - // super.connectPorts(aggregatedTraceDistributor.getNewOutputPort(), dependencyCreatorStage.getInputPort()); - // super.connectPorts(dependencyCreatorStage.getOutputPort(), dependencyStatisticsDecoratorStage.getInputPort()); - /* * * diff --git a/src/main/java/kieker/analysis/dev/ComponentStatisticsDecoratorStage.java b/src/main/java/kieker/analysis/dev/ComponentStatisticsDecoratorStage.java new file mode 100644 index 00000000..3883ae5d --- /dev/null +++ b/src/main/java/kieker/analysis/dev/ComponentStatisticsDecoratorStage.java @@ -0,0 +1,45 @@ +package kieker.analysis.dev; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import kieker.analysis.domain.systemdependency.Component; +import kieker.analysis.domain.systemdependency.Container; +import kieker.analysis.domain.systemdependency.Operation; +import kieker.analysis.domain.systemdependency.SoftwareSystem; +import kieker.analysis.traceanalysisutil.Statistics; +import kieker.analysis.traceanalysisutil.StatisticsUtility; + +import teetime.stage.basic.AbstractTransformation; + +public class ComponentStatisticsDecoratorStage extends AbstractTransformation<SoftwareSystem, SoftwareSystem> { + + @Override + protected void execute(final SoftwareSystem softwareSystem) { + + for (Container container : softwareSystem.getContainers()) { + for (Component component : container.getComponents()) { + // TODO How to handle Statistics? + // All durations of all OperationCalls + + List<Long> durations = new ArrayList<>(); + + for (Operation operation : component.getOperations()) { + List<Long> operationsDurations = operation.getOperationCalls().stream().map(c -> c.getDuration()).collect(Collectors.toList()); + durations.addAll(operationsDurations); + } + + final Statistics statistics = StatisticsUtility.calculateStatistics(durations); + component.setTotalDuration(statistics.getTotalDuration()); + component.setMaxDuration(statistics.getMaxDuration()); + component.setMinDuration(statistics.getMinDuration()); + component.setMeanDuration(statistics.getMeanDuration()); + component.setMedianDuration(statistics.getMedianDuration()); + + } + } + + } + +} diff --git a/src/main/java/kieker/analysis/dev/ContainerStatisticsDecoratorStage.java b/src/main/java/kieker/analysis/dev/ContainerStatisticsDecoratorStage.java new file mode 100644 index 00000000..1ef03e80 --- /dev/null +++ b/src/main/java/kieker/analysis/dev/ContainerStatisticsDecoratorStage.java @@ -0,0 +1,45 @@ +package kieker.analysis.dev; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import kieker.analysis.domain.systemdependency.Component; +import kieker.analysis.domain.systemdependency.Container; +import kieker.analysis.domain.systemdependency.Operation; +import kieker.analysis.domain.systemdependency.SoftwareSystem; +import kieker.analysis.traceanalysisutil.Statistics; +import kieker.analysis.traceanalysisutil.StatisticsUtility; + +import teetime.stage.basic.AbstractTransformation; + +public class ContainerStatisticsDecoratorStage extends AbstractTransformation<SoftwareSystem, SoftwareSystem> { + + @Override + protected void execute(final SoftwareSystem softwareSystem) { + + for (Container container : softwareSystem.getContainers()) { + + // TODO How to handle Statistics? + // All durations of all OperationCalls + + List<Long> durations = new ArrayList<>(); + for (Component component : container.getComponents()) { + for (Operation operation : component.getOperations()) { + List<Long> operationsDurations = operation.getOperationCalls().stream().map(c -> c.getDuration()).collect(Collectors.toList()); + durations.addAll(operationsDurations); + } + } + + final Statistics statistics = StatisticsUtility.calculateStatistics(durations); + container.setTotalDuration(statistics.getTotalDuration()); + container.setMaxDuration(statistics.getMaxDuration()); + container.setMinDuration(statistics.getMinDuration()); + container.setMeanDuration(statistics.getMeanDuration()); + container.setMedianDuration(statistics.getMedianDuration()); + + } + + } + +} diff --git a/src/main/java/kieker/analysis/dev/DependencyStatisticsDecorator.java b/src/main/java/kieker/analysis/dev/DependencyStatisticsDecorator.java index a91a378a..27953778 100644 --- a/src/main/java/kieker/analysis/dev/DependencyStatisticsDecorator.java +++ b/src/main/java/kieker/analysis/dev/DependencyStatisticsDecorator.java @@ -13,6 +13,7 @@ import kieker.analysis.traceanalysisutil.StatisticsUtility; * */ // TODO Maybe make static +@Deprecated public class DependencyStatisticsDecorator { public void decorate(final OperationsDependency operationsDependency) { diff --git a/src/main/java/kieker/analysis/dev/DependencyStatisticsDecoratorStage.java b/src/main/java/kieker/analysis/dev/DependencyStatisticsDecoratorStage.java index 75fb19d0..50be4142 100644 --- a/src/main/java/kieker/analysis/dev/DependencyStatisticsDecoratorStage.java +++ b/src/main/java/kieker/analysis/dev/DependencyStatisticsDecoratorStage.java @@ -8,6 +8,7 @@ import teetime.stage.basic.AbstractTransformation; * @author Sören Henning * */ +@Deprecated public class DependencyStatisticsDecoratorStage extends AbstractTransformation<OperationsDependency, OperationsDependency> { private final DependencyStatisticsDecorator statisticsDecorator = new DependencyStatisticsDecorator(); diff --git a/src/main/java/kieker/analysis/dev/OperationsDependencyGraphCreatorStage.java b/src/main/java/kieker/analysis/dev/OperationsDependencyGraphCreatorStage.java new file mode 100644 index 00000000..31351940 --- /dev/null +++ b/src/main/java/kieker/analysis/dev/OperationsDependencyGraphCreatorStage.java @@ -0,0 +1,72 @@ +package kieker.analysis.dev; + +import kieker.analysis.domain.systemdependency.Component; +import kieker.analysis.domain.systemdependency.Container; +import kieker.analysis.domain.systemdependency.Dependency; +import kieker.analysis.domain.systemdependency.Operation; +import kieker.analysis.domain.systemdependency.SoftwareSystem; +import kieker.analysis.util.graph.Edge; +import kieker.analysis.util.graph.Graph; +import kieker.analysis.util.graph.Vertex; +import kieker.analysis.util.graph.impl.GraphImpl; + +import teetime.stage.basic.AbstractTransformation; + +public class OperationsDependencyGraphCreatorStage extends AbstractTransformation<SoftwareSystem, Graph> { + + @Override + protected void execute(final SoftwareSystem softwareSystem) { + + Graph graph = new GraphImpl(); + + for (Container container : softwareSystem.getContainers()) { + + Vertex containerVertex = graph.addVertex(container.getIdentifier()); + + for (Component component : container.getComponents()) { + + Vertex componentVertex = graph.addVertex(component.getIdentifier()); + + for (Operation operation : component.getOperations()) { + + Vertex operationVertex = graph.addVertex(operation.getIdentifier()); + + } + } + } + + for (Dependency<Container> containerDependency : softwareSystem.getContainerDependencies()) { + + Vertex callerVertex = graph.getVertex(containerDependency.getCaller().getIdentifier()); + Vertex calleeVertex = graph.getVertex(containerDependency.getCaller().getIdentifier()); + + Edge dependencyEdge = graph.addEdge(null, callerVertex, calleeVertex); + dependencyEdge.setProperty("calls", containerDependency.getCalls()); + dependencyEdge.setProperty("failuredCalls", containerDependency.getFailuredCalls()); + } + + for (Dependency<Component> componentDependency : softwareSystem.getComponentDependencies()) { + + Vertex callerVertex = graph.getVertex(componentDependency.getCaller().getIdentifier()); + Vertex calleeVertex = graph.getVertex(componentDependency.getCaller().getIdentifier()); + + Edge dependencyEdge = graph.addEdge(null, callerVertex, calleeVertex); + dependencyEdge.setProperty("calls", componentDependency.getCalls()); + dependencyEdge.setProperty("failuredCalls", componentDependency.getFailuredCalls()); + } + + for (Dependency<Operation> operationDependency : softwareSystem.getOperationDependencies()) { + + Vertex callerVertex = graph.getVertex(operationDependency.getCaller().getIdentifier()); + Vertex calleeVertex = graph.getVertex(operationDependency.getCaller().getIdentifier()); + + Edge dependencyEdge = graph.addEdge(null, callerVertex, calleeVertex); + dependencyEdge.setProperty("calls", operationDependency.getCalls()); + dependencyEdge.setProperty("failuredCalls", operationDependency.getFailuredCalls()); + } + + this.outputPort.send(graph); + + } + +} diff --git a/src/main/java/kieker/analysis/dev/OperationsStatisticsDecoratorStage.java b/src/main/java/kieker/analysis/dev/OperationsStatisticsDecoratorStage.java index 8c69048b..c2f46217 100644 --- a/src/main/java/kieker/analysis/dev/OperationsStatisticsDecoratorStage.java +++ b/src/main/java/kieker/analysis/dev/OperationsStatisticsDecoratorStage.java @@ -35,6 +35,7 @@ public class OperationsStatisticsDecoratorStage extends AbstractTransformation<S } } + this.outputPort.send(softwareSystem); } } -- GitLab