diff --git a/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java b/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java index 946ef33f4556b35eb0128c97dc519305c856bc34..926355a1c5d11ca73892264827dc6f2fd7c4afc9 100644 --- a/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java +++ b/src/main/java/kieker/analysis/TraceAnalysisConfiguration.java @@ -5,8 +5,10 @@ package kieker.analysis; import java.io.File; +import kieker.analysis.dev.SoftwareSystemCreatorStage; import kieker.analysis.domain.AggregatedTrace; import kieker.analysis.domain.Trace; +import kieker.analysis.domain.systemdependency.SoftwareSystem; import kieker.analysis.stage.tracediagnosis.AllowedRecordsFilter; import kieker.analysis.stage.tracediagnosis.BeginEndOfMonitoringDetector; import kieker.analysis.stage.tracediagnosis.ReadingComposite; @@ -19,6 +21,7 @@ import kieker.analysis.util.graph.Graph; import kieker.analysis.util.graph.export.graphml.GraphMLFileWriterStage; import kieker.common.record.IMonitoringRecord; +import teetime.framework.AbstractConsumerStage; import teetime.framework.Configuration; import teetime.stage.MultipleInstanceOfFilter; import teetime.stage.basic.distributor.Distributor; @@ -85,6 +88,16 @@ public class TraceAnalysisConfiguration extends Configuration { super.connectPorts(graphDistributor2.getNewOutputPort(), graphMLFileWriterComposite2.getInputPort()); super.connectPorts(graphDistributor2.getNewOutputPort(), dotTraceGraphFileWriterStage2.getInputPort()); + SoftwareSystemCreatorStage softwareSystemCreator = new SoftwareSystemCreatorStage(); + + super.connectPorts(aggregatedTraceDistributor.getNewOutputPort(), softwareSystemCreator.getInputPort()); + super.connectPorts(softwareSystemCreator.getOutputPort(), 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()); diff --git a/src/main/java/kieker/analysis/dev/DependencyCreator.java b/src/main/java/kieker/analysis/dev/DependencyCreator.java index d22e2a39b233f67dcdb040651157a48b0f30d922..f6b53f28d573716c478fb8c4a757464b73b413eb 100644 --- a/src/main/java/kieker/analysis/dev/DependencyCreator.java +++ b/src/main/java/kieker/analysis/dev/DependencyCreator.java @@ -16,13 +16,28 @@ public class DependencyCreator extends OperationCallVisitor<AggregatedOperationC } @Override - public void visit(final AggregatedOperationCall operationCall) { + public void visit(final AggregatedOperationCall call) { - Container calleeContainer = softwareSystem.addContainer(operationCall.getContainer()); - Component calleeComponent = calleeContainer.addComponent(operationCall.getComponent()); - Operation calleeOperation = calleeComponent.addOperation(operationCall.getOperation()); + Container calleeContainer = softwareSystem.addContainer(call.getContainer()); + Component calleeComponent = calleeContainer.addComponent(call.getComponent()); + Operation calleeOperation = calleeComponent.addOperation(call.getOperation()); - // Jetzt die Dependencies eintragen + calleeOperation.getOperationCalls().addAll(call.getBaseOperationCalls()); + + final AggregatedOperationCall parentCall = call.getParent(); + if (parentCall != null) { + Container callerContainer = softwareSystem.addContainer(call.getContainer()); + Component callerComponent = callerContainer.addComponent(call.getComponent()); + Operation callerOperation = callerComponent.addOperation(call.getOperation()); + + final int numberOfCalls = call.getCalls(); + + softwareSystem.addOperationDependency(callerOperation, calleeOperation).setCalls(numberOfCalls); + softwareSystem.addComponentDependency(callerComponent, calleeComponent).setCalls(numberOfCalls); + softwareSystem.addContainerDependency(callerContainer, calleeContainer).setCalls(numberOfCalls); + + // TODO set failure calls + } } public SoftwareSystem getSoftwareSystem() { diff --git a/src/main/java/kieker/analysis/dev/DependencyCreatorStage.java b/src/main/java/kieker/analysis/dev/SoftwareSystemCreatorStage.java similarity index 87% rename from src/main/java/kieker/analysis/dev/DependencyCreatorStage.java rename to src/main/java/kieker/analysis/dev/SoftwareSystemCreatorStage.java index 9e825d5d2018139dedc7ed91e4a808a67547a772..f4ea474cbfb3fb53a52f8eb54fb57ffe48a2d73e 100644 --- a/src/main/java/kieker/analysis/dev/DependencyCreatorStage.java +++ b/src/main/java/kieker/analysis/dev/SoftwareSystemCreatorStage.java @@ -6,7 +6,7 @@ import kieker.analysis.trace.traversal.TraceTraverser; import teetime.stage.basic.AbstractTransformation; -public class DependencyCreatorStage extends AbstractTransformation<AggregatedTrace, SoftwareSystem> { +public class SoftwareSystemCreatorStage extends AbstractTransformation<AggregatedTrace, SoftwareSystem> { private final SoftwareSystem softwareSystem = new SoftwareSystem(); private final DependencyCreator dependencyCreator = new DependencyCreator(softwareSystem); diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Component.java b/src/main/java/kieker/analysis/domain/systemdependency/Component.java index f40c39a491e1385de80bc51f9c867c88f43c034d..aa5b545a40db676dda0d2c9a5aa044b862b32c59 100644 --- a/src/main/java/kieker/analysis/domain/systemdependency/Component.java +++ b/src/main/java/kieker/analysis/domain/systemdependency/Component.java @@ -23,7 +23,7 @@ public class Component extends SystemEntity { } public Operation addOperation(final String name) { - if (this.operations.containsKey(name)) { + if (!this.operations.containsKey(name)) { this.operations.put(name, new Operation(name, this)); } return this.operations.get(name); diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Container.java b/src/main/java/kieker/analysis/domain/systemdependency/Container.java index e4607505b494b02cce0a00e93075b81bf4e78e53..a41a678f58780a31314a6e16ed185b6bbf1c80cb 100644 --- a/src/main/java/kieker/analysis/domain/systemdependency/Container.java +++ b/src/main/java/kieker/analysis/domain/systemdependency/Container.java @@ -17,7 +17,7 @@ public class Container extends SystemEntity { } public Component addComponent(final String name) { - if (this.components.containsKey(name)) { + if (!this.components.containsKey(name)) { this.components.put(name, new Component(name, this)); } return this.components.get(name); diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Dependency.java b/src/main/java/kieker/analysis/domain/systemdependency/Dependency.java index a3c7a9f64540e589523bcc490f947a1cc5c353ba..4a3e43e09b28f44ce0b844121230b36ac31c5b52 100644 --- a/src/main/java/kieker/analysis/domain/systemdependency/Dependency.java +++ b/src/main/java/kieker/analysis/domain/systemdependency/Dependency.java @@ -9,7 +9,6 @@ public class Dependency<E extends SystemEntity> { private int failuredCalls; public Dependency(final E caller, final E callee) { - super(); this.caller = caller; this.callee = callee; } diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Operation.java b/src/main/java/kieker/analysis/domain/systemdependency/Operation.java index af8c07ebd66876e600d12b7f32de381efc0adcbf..e1b4379f7a811a0f5d2f32b14aa7dcfb2c2e16a4 100644 --- a/src/main/java/kieker/analysis/domain/systemdependency/Operation.java +++ b/src/main/java/kieker/analysis/domain/systemdependency/Operation.java @@ -1,9 +1,16 @@ package kieker.analysis.domain.systemdependency; +import java.util.ArrayList; +import java.util.Collection; + +import kieker.analysis.domain.OperationCall; + public class Operation extends SystemEntity { private final Component component; + private final Collection<OperationCall> operationCalls = new ArrayList<>(); + protected Operation(final String name, final Component component) { super(name, component.getIdentifier() + ',' + name); this.component = component; @@ -13,4 +20,8 @@ public class Operation extends SystemEntity { return component; } + public Collection<OperationCall> getOperationCalls() { + return operationCalls; + } + } diff --git a/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java b/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java index d647aab07d8db3e75add3b66179ce9e5fa33bb50..1c0ba9d6c7cd00a1522ff871eede08fe2c0ae371 100644 --- a/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java +++ b/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java @@ -1,6 +1,5 @@ package kieker.analysis.domain.systemdependency; -import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -9,9 +8,9 @@ public class SoftwareSystem { private final Map<String, Container> containers = new HashMap<>(); - private Collection<Dependency<Container>> containerDependencies = new ArrayList<>(); - private Collection<Dependency<Component>> componentDependencies = new ArrayList<>(); - private Collection<Dependency<Operation>> operationDependencies = new ArrayList<>(); + private final Map<String, Dependency<Container>> containerDependencies = new HashMap<>(); + private final Map<String, Dependency<Component>> componentDependencies = new HashMap<>(); + private final Map<String, Dependency<Operation>> operationDependencies = new HashMap<>(); public SoftwareSystem() {} @@ -20,34 +19,46 @@ public class SoftwareSystem { } public Container addContainer(final String name) { - if (this.containers.containsKey(name)) { + if (!this.containers.containsKey(name)) { this.containers.put(name, new Container(name)); } return this.containers.get(name); } public Collection<Dependency<Container>> getContainerDependencies() { - return containerDependencies; + return containerDependencies.values(); } - public void setContainerDependencies(final Collection<Dependency<Container>> containerDependencies) { - this.containerDependencies = containerDependencies; + public Dependency<Container> addContainerDependency(final Container caller, final Container callee) { + final String identifier = caller.getIdentifier() + "-" + callee.getIdentifier(); + if (!this.containerDependencies.containsKey(identifier)) { + this.containerDependencies.put(identifier, new Dependency<Container>(caller, callee)); + } + return this.containerDependencies.get(identifier); } public Collection<Dependency<Component>> getComponentDependencies() { - return componentDependencies; + return componentDependencies.values(); } - public void setComponentDependencies(final Collection<Dependency<Component>> componentDependencies) { - this.componentDependencies = componentDependencies; + public Dependency<Component> addComponentDependency(final Component caller, final Component callee) { + final String identifier = caller.getIdentifier() + "-" + callee.getIdentifier(); + if (!this.componentDependencies.containsKey(identifier)) { + this.componentDependencies.put(identifier, new Dependency<Component>(caller, callee)); + } + return this.componentDependencies.get(identifier); } public Collection<Dependency<Operation>> getOperationDependencies() { - return operationDependencies; + return operationDependencies.values(); } - public void setOperationDependencies(final Collection<Dependency<Operation>> operationDependencies) { - this.operationDependencies = operationDependencies; + public Dependency<Operation> addOperationDependency(final Operation caller, final Operation callee) { + final String identifier = caller.getIdentifier() + "-" + callee.getIdentifier(); + if (!this.operationDependencies.containsKey(identifier)) { + this.operationDependencies.put(identifier, new Dependency<Operation>(caller, callee)); + } + return this.operationDependencies.get(identifier); } } diff --git a/src/main/java/kieker/analysis/domain/systemdependency/SystemEntitySet.java b/src/main/java/kieker/analysis/domain/systemdependency/SystemEntitySet.java index 1ffbcdcb144639d9a1f91ca25ee15cfdc7746b3c..0d392c77b0c7c363067b509da27321e3c5bdfaa3 100644 --- a/src/main/java/kieker/analysis/domain/systemdependency/SystemEntitySet.java +++ b/src/main/java/kieker/analysis/domain/systemdependency/SystemEntitySet.java @@ -6,6 +6,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; +@Deprecated public class SystemEntitySet<E extends SystemEntity> implements Set<E> { private final Map<String, E> entries;