From 8d8b560987e65494b52246de638da181f55d30d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Blu=CC=88mke?= <lbl@informatik.uni-kiel.de> Date: Fri, 14 Oct 2016 11:25:07 +0200 Subject: [PATCH] migration and restructuring of TraceIdFilter --- .../filter/select/traceid/TraceIdFilter.java | 85 +++++++++++++++++++ .../components/AbstractTraceIdFilter.java | 62 ++++++++++++++ .../OperationExecutionTraceIdFilter.java | 16 ++++ .../components/TraceEventTraceIdFilter.java | 16 ++++ .../TraceMetadataTraceIdFilter.java | 16 ++++ 5 files changed, 195 insertions(+) create mode 100644 src/main/java/kieker/analysis/plugin/filter/select/traceid/TraceIdFilter.java create mode 100644 src/main/java/kieker/analysis/plugin/filter/select/traceid/components/AbstractTraceIdFilter.java create mode 100644 src/main/java/kieker/analysis/plugin/filter/select/traceid/components/OperationExecutionTraceIdFilter.java create mode 100644 src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceEventTraceIdFilter.java create mode 100644 src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceMetadataTraceIdFilter.java diff --git a/src/main/java/kieker/analysis/plugin/filter/select/traceid/TraceIdFilter.java b/src/main/java/kieker/analysis/plugin/filter/select/traceid/TraceIdFilter.java new file mode 100644 index 00000000..e8de83a7 --- /dev/null +++ b/src/main/java/kieker/analysis/plugin/filter/select/traceid/TraceIdFilter.java @@ -0,0 +1,85 @@ +package kieker.analysis.plugin.filter.select.traceid; + +import kieker.analysis.plugin.filter.select.traceid.components.OperationExecutionTraceIdFilter; +import kieker.analysis.plugin.filter.select.traceid.components.TraceEventTraceIdFilter; +import kieker.analysis.plugin.filter.select.traceid.components.TraceMetadataTraceIdFilter; +import kieker.common.record.IMonitoringRecord; +import kieker.common.record.controlflow.OperationExecutionRecord; +import kieker.common.record.flow.trace.AbstractTraceEvent; +import kieker.common.record.flow.trace.TraceMetadata; + +import teetime.framework.CompositeStage; +import teetime.framework.InputPort; +import teetime.framework.OutputPort; +import teetime.stage.MultipleInstanceOfFilter; +import teetime.stage.basic.merger.Merger; + +public class TraceIdFilter extends CompositeStage { + + private InputPort<IMonitoringRecord> monitoringRecordsCombinedInputPort; + + private OutputPort<IMonitoringRecord> matchingTraceIdOutputPort; + private OutputPort<IMonitoringRecord> mismatchingTraceIdOutputPort; + + private final MultipleInstanceOfFilter<IMonitoringRecord> instanceOfFilter; + private final TraceMetadataTraceIdFilter traceMetadataFilter; + private final TraceEventTraceIdFilter traceEventFilter; + private final OperationExecutionTraceIdFilter operationExecutionFilter; + + private final Merger<IMonitoringRecord> matchingMerger; + private final Merger<IMonitoringRecord> mismatchingMerger; + + /** + * Creates a new instance of this class using the given parameters. + * + * @param acceptAllTraces + * Determining whether to accept all traces, regardless of the given trace IDs. + * @param selectedTraceIds + * Determining which trace IDs should be accepted by this filter. + */ + public TraceIdFilter(final boolean acceptAllTraces, final String[] selectedTraceIds) { + // Initializing the internal filters + this.instanceOfFilter = new MultipleInstanceOfFilter<>(); + this.traceMetadataFilter = new TraceMetadataTraceIdFilter(acceptAllTraces, selectedTraceIds); + this.traceEventFilter = new TraceEventTraceIdFilter(acceptAllTraces, selectedTraceIds); + this.operationExecutionFilter = new OperationExecutionTraceIdFilter(acceptAllTraces, selectedTraceIds); + + this.matchingMerger = new Merger<>(); + this.mismatchingMerger = new Merger<>(); + + this.monitoringRecordsCombinedInputPort = instanceOfFilter.getInputPort(); + this.matchingTraceIdOutputPort = matchingMerger.getOutputPort(); + this.mismatchingTraceIdOutputPort = mismatchingMerger.getOutputPort(); + + // Connecting the internal filters + this.monitoringRecordsCombinedInputPort = instanceOfFilter.getInputPort(); + + connectPorts(this.instanceOfFilter.getOutputPortForType(TraceMetadata.class), this.traceMetadataFilter.getInputPort()); + connectPorts(this.instanceOfFilter.getOutputPortForType(AbstractTraceEvent.class), this.traceEventFilter.getInputPort()); + connectPorts(this.instanceOfFilter.getOutputPortForType(OperationExecutionRecord.class), this.operationExecutionFilter.getInputPort()); + + connectPorts(this.traceMetadataFilter.getMatchingTraceIdOutputPort(), this.matchingMerger.getNewInputPort()); + connectPorts(this.traceEventFilter.getMatchingTraceIdOutputPort(), this.matchingMerger.getNewInputPort()); + connectPorts(this.operationExecutionFilter.getMatchingTraceIdOutputPort(), this.matchingMerger.getNewInputPort()); + + connectPorts(this.traceMetadataFilter.getMismatchingTraceIdOutputPort(), this.mismatchingMerger.getNewInputPort()); + connectPorts(this.traceEventFilter.getMismatchingTraceIdOutputPort(), this.mismatchingMerger.getNewInputPort()); + connectPorts(this.operationExecutionFilter.getMismatchingTraceIdOutputPort(), this.mismatchingMerger.getNewInputPort()); + + this.matchingTraceIdOutputPort = this.matchingMerger.getOutputPort(); + this.mismatchingTraceIdOutputPort = this.mismatchingMerger.getOutputPort(); + } + + public InputPort<IMonitoringRecord> getMonitoringRecordsCombinedInputPort() { + return this.monitoringRecordsCombinedInputPort; + } + + public OutputPort<IMonitoringRecord> getMatchingTraceIdOutputPort() { + return this.matchingTraceIdOutputPort; + } + + public OutputPort<IMonitoringRecord> getMismatchingTraceIdOutputPort() { + return this.mismatchingTraceIdOutputPort; + } + +} diff --git a/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/AbstractTraceIdFilter.java b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/AbstractTraceIdFilter.java new file mode 100644 index 00000000..0436f8fe --- /dev/null +++ b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/AbstractTraceIdFilter.java @@ -0,0 +1,62 @@ +package kieker.analysis.plugin.filter.select.traceid.components; + +import java.util.Set; +import java.util.TreeSet; + +import teetime.framework.AbstractConsumerStage; +import teetime.framework.OutputPort; + +public abstract class AbstractTraceIdFilter<T> extends AbstractConsumerStage<T> { + + private final boolean acceptAllTraces; + private final Set<Long> selectedTraceIds; + + private final OutputPort<T> matchingTraceIdOutputPort = createOutputPort(); + private final OutputPort<T> mismatchingTraceIdOutputPort = createOutputPort(); + + /** + * Creates a new instance of this class using the given parameters. + * + * @param acceptAllTraces + * Determining whether to accept all traces, regardless of the given trace IDs. + * @param selectedTraceIds + * Determining which trace IDs should be accepted by this filter. + */ + public AbstractTraceIdFilter(final boolean acceptAllTraces, final String[] selectedTraceIds) { + + this.acceptAllTraces = acceptAllTraces; + this.selectedTraceIds = new TreeSet<Long>(); + for (final String id : selectedTraceIds) { + this.selectedTraceIds.add(Long.parseLong(id)); + } + } + + private final boolean acceptId(final long traceId) { + if (this.acceptAllTraces || this.selectedTraceIds.contains(traceId)) { + return true; + } + return false; + } + + @Override + protected void execute(final T record) { + if (this.acceptId(this.getRecordsTraceId(record))) { + this.matchingTraceIdOutputPort.send(record); + } else { + this.mismatchingTraceIdOutputPort.send(record); + } + } + + protected abstract long getRecordsTraceId(T record); + + /** Returns the output port delivering the records with matching IDs. */ + public OutputPort<T> getMatchingTraceIdOutputPort() { + return matchingTraceIdOutputPort; + } + + /** Returns the output port delivering the records with the non matching IDs. */ + public OutputPort<T> getMismatchingTraceIdOutputPort() { + return mismatchingTraceIdOutputPort; + } + +} diff --git a/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/OperationExecutionTraceIdFilter.java b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/OperationExecutionTraceIdFilter.java new file mode 100644 index 00000000..eaa9600e --- /dev/null +++ b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/OperationExecutionTraceIdFilter.java @@ -0,0 +1,16 @@ +package kieker.analysis.plugin.filter.select.traceid.components; + +import kieker.common.record.controlflow.OperationExecutionRecord; + +public class OperationExecutionTraceIdFilter extends AbstractTraceIdFilter<OperationExecutionRecord> { + + public OperationExecutionTraceIdFilter(final boolean acceptAllTraces, final String[] selectedTraceIds) { + super(acceptAllTraces, selectedTraceIds); + } + + @Override + protected long getRecordsTraceId(final OperationExecutionRecord record) { + return record.getTraceId(); + } + +} diff --git a/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceEventTraceIdFilter.java b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceEventTraceIdFilter.java new file mode 100644 index 00000000..d3142c52 --- /dev/null +++ b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceEventTraceIdFilter.java @@ -0,0 +1,16 @@ +package kieker.analysis.plugin.filter.select.traceid.components; + +import kieker.common.record.flow.trace.AbstractTraceEvent; + +public class TraceEventTraceIdFilter extends AbstractTraceIdFilter<AbstractTraceEvent> { + + public TraceEventTraceIdFilter(final boolean acceptAllTraces, final String[] selectedTraceIds) { + super(acceptAllTraces, selectedTraceIds); + } + + @Override + protected long getRecordsTraceId(final AbstractTraceEvent record) { + return record.getTraceId(); + } + +} diff --git a/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceMetadataTraceIdFilter.java b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceMetadataTraceIdFilter.java new file mode 100644 index 00000000..fc8f6543 --- /dev/null +++ b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceMetadataTraceIdFilter.java @@ -0,0 +1,16 @@ +package kieker.analysis.plugin.filter.select.traceid.components; + +import kieker.common.record.flow.trace.TraceMetadata; + +public class TraceMetadataTraceIdFilter extends AbstractTraceIdFilter<TraceMetadata> { + + public TraceMetadataTraceIdFilter(final boolean acceptAllTraces, final String[] selectedTraceIds) { + super(acceptAllTraces, selectedTraceIds); + } + + @Override + protected long getRecordsTraceId(final TraceMetadata record) { + return record.getTraceId(); + } + +} -- GitLab