From 2a2f7843f118c1b32dd2da5eacf0e24906b3edb3 Mon Sep 17 00:00:00 2001 From: Florian Fittkau <ffi@informatik.uni-kiel.de> Date: Wed, 11 Dec 2013 17:08:19 +0100 Subject: [PATCH] response times in explorviz --- .../TraceReconstructionBuffer.java | 13 ++ .../TracePatternSummarizationBuffer.java | 9 +- .../reader/TCPReaderOneClient.java | 207 +++++++++++++----- .../TraceReconstructionBufferTest.java | 2 +- 4 files changed, 168 insertions(+), 63 deletions(-) diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java index 19f61ea..7b145ca 100644 --- a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java +++ b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java @@ -2,6 +2,7 @@ package explorviz.live_trace_processing.filter.reconstruction; import java.util.ArrayList; import java.util.List; +import java.util.Stack; import explorviz.live_trace_processing.Constants; import explorviz.live_trace_processing.reader.TimeProvider; @@ -75,6 +76,18 @@ class TraceReconstructionBuffer { } public final Trace toTrace(final boolean valid) { + final Stack<AbstractEventRecord> stack = new Stack<AbstractEventRecord>(); + for (final AbstractEventRecord event : events) { + if (event instanceof AbstractBeforeEventRecord) { + stack.push(event); + } else if ((event instanceof AbstractAfterEventRecord) + || (event instanceof AbstractAfterFailedEventRecord)) { + final AbstractEventRecord beforeEvent = stack.pop(); + + final long time = event.getLoggingTimestamp() - beforeEvent.getLoggingTimestamp(); + beforeEvent.getRuntime().set(time); + } + } return new Trace(events, valid); } } diff --git a/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java b/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java index 046c6e8..a7cba06 100644 --- a/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java +++ b/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java @@ -2,6 +2,7 @@ package explorviz.live_trace_processing.filter.reduction.summarization; import java.util.List; +import explorviz.live_trace_processing.record.event.AbstractBeforeEventRecord; import explorviz.live_trace_processing.record.event.AbstractEventRecord; import explorviz.live_trace_processing.record.trace.Trace; @@ -25,12 +26,14 @@ class TracePatternSummarizationBuffer { if (accumulator == null) { accumulator = trace; } else { - final List<AbstractEventRecord> aggregatedRecords = accumulator - .getTraceEvents(); + final List<AbstractEventRecord> aggregatedRecords = accumulator.getTraceEvents(); final List<AbstractEventRecord> records = trace.getTraceEvents(); for (int i = 0; i < aggregatedRecords.size(); i++) { - aggregatedRecords.get(i).getRuntime().merge(records.get(i).getRuntime()); + final AbstractEventRecord event = aggregatedRecords.get(i); + if (event instanceof AbstractBeforeEventRecord) { + aggregatedRecords.get(i).getRuntime().merge(records.get(i).getRuntime()); + } } } } diff --git a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java index ef6fd8c..961c686 100644 --- a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java +++ b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java @@ -21,6 +21,9 @@ import explorviz.live_trace_processing.record.event.constructor.BeforeConstructo import explorviz.live_trace_processing.record.event.normal.AfterFailedOperationEventRecord; import explorviz.live_trace_processing.record.event.normal.AfterOperationEventRecord; import explorviz.live_trace_processing.record.event.normal.BeforeOperationEventRecord; +import explorviz.live_trace_processing.record.event.statics.AfterFailedStaticOperationEventRecord; +import explorviz.live_trace_processing.record.event.statics.AfterStaticOperationEventRecord; +import explorviz.live_trace_processing.record.event.statics.BeforeStaticOperationEventRecord; import explorviz.live_trace_processing.record.misc.StringRegistryRecord; import explorviz.live_trace_processing.record.misc.SystemMonitoringRecord; import explorviz.live_trace_processing.record.misc.TimedPeriodRecord; @@ -85,42 +88,39 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec case HostApplicationMetaDataRecord.CLAZZ_ID: { if (buffer.remaining() >= HostApplicationMetaDataRecord.BYTE_LENGTH) { readInHostApplicationMetaData(buffer); - } else { - buffer.position(buffer.position() - 1); - buffer.compact(); - return; + break; } - break; + buffer.position(buffer.position() - 1); + buffer.compact(); + return; } case BeforeOperationEventRecord.CLAZZ_ID: { if (buffer.remaining() >= BeforeOperationEventRecord.COMPRESSED_BYTE_LENGTH) { readInBeforeOperationEvent(buffer); - } else { - buffer.position(buffer.position() - 1); - buffer.compact(); - return; + break; } - break; + buffer.position(buffer.position() - 1); + buffer.compact(); + return; } case AfterFailedOperationEventRecord.CLAZZ_ID: { if (buffer.remaining() >= AfterFailedOperationEventRecord.COMPRESSED_BYTE_LENGTH) { readInAfterFailedOperationEvent(buffer); - } else { - buffer.position(buffer.position() - 1); - buffer.compact(); - return; + break; } - break; + buffer.position(buffer.position() - 1); + buffer.compact(); + return; + } case AfterOperationEventRecord.CLAZZ_ID: { if (buffer.remaining() >= AfterOperationEventRecord.COMPRESSED_BYTE_LENGTH) { readInAfterOperationEvent(buffer); - } else { - buffer.position(buffer.position() - 1); - buffer.compact(); - return; + break; } - break; + buffer.position(buffer.position() - 1); + buffer.compact(); + return; } case StringRegistryRecord.CLAZZ_ID: { int mapId = 0; @@ -152,12 +152,11 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec case SystemMonitoringRecord.CLAZZ_ID: { if (buffer.remaining() >= SystemMonitoringRecord.BYTE_LENGTH) { readInSystemMonitoringRecord(buffer); - } else { - buffer.position(buffer.position() - 1); - buffer.compact(); - return; + break; } - break; + buffer.position(buffer.position() - 1); + buffer.compact(); + return; } case Trace.CLAZZ_ID: { if (buffer.remaining() >= 9) { @@ -184,48 +183,69 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec } putInRingBuffer(new Trace(events, valid)); - } else { - buffer.position(buffer.position() - 10); - buffer.compact(); - return; + break; } - } else { - buffer.position(buffer.position() - 1); + buffer.position(buffer.position() - 10); buffer.compact(); return; } - - break; + buffer.position(buffer.position() - 1); + buffer.compact(); + return; } case BeforeConstructorEventRecord.CLAZZ_ID: { if (buffer.remaining() >= BeforeConstructorEventRecord.COMPRESSED_BYTE_LENGTH) { readInBeforeConstructorEvent(buffer); - } else { - buffer.position(buffer.position() - 1); - buffer.compact(); - return; + break; } - break; + buffer.position(buffer.position() - 1); + buffer.compact(); + return; } case AfterFailedConstructorEventRecord.CLAZZ_ID: { if (buffer.remaining() >= AfterFailedConstructorEventRecord.COMPRESSED_BYTE_LENGTH) { readInAfterFailedConstructorEvent(buffer); - } else { - buffer.position(buffer.position() - 1); - buffer.compact(); - return; + break; } - break; + buffer.position(buffer.position() - 1); + buffer.compact(); + return; } case AfterConstructorEventRecord.CLAZZ_ID: { if (buffer.remaining() >= AfterConstructorEventRecord.COMPRESSED_BYTE_LENGTH) { readInAfterConstructorEvent(buffer); - } else { - buffer.position(buffer.position() - 1); - buffer.compact(); - return; + break; } - break; + buffer.position(buffer.position() - 1); + buffer.compact(); + return; + } + case BeforeStaticOperationEventRecord.CLAZZ_ID: { + if (buffer.remaining() >= BeforeStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH) { + readInBeforeStaticOperationEvent(buffer); + break; + } + buffer.position(buffer.position() - 1); + buffer.compact(); + return; + } + case AfterFailedStaticOperationEventRecord.CLAZZ_ID: { + if (buffer.remaining() >= AfterFailedStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH) { + readInAfterFailedStaticOperationEvent(buffer); + break; + } + buffer.position(buffer.position() - 1); + buffer.compact(); + return; + } + case AfterStaticOperationEventRecord.CLAZZ_ID: { + if (buffer.remaining() >= AfterStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH) { + readInAfterStaticOperationEvent(buffer); + break; + } + buffer.position(buffer.position() - 1); + buffer.compact(); + return; } default: { System.out.println("unknown class id " + clazzId + " at offset " @@ -264,11 +284,9 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec final String operation = stringRegistry.getStringFromId(operationId); putInRingBuffer(new BeforeOperationEventRecord(timestamp, traceId, orderIndex, - objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation( - timestamp))); + objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation())); } catch (final IdNotAvailableException e) { - putInWaitingMessages(buffer, - BeforeOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID); + putInWaitingMessages(buffer, BeforeOperationEventRecord.COMPRESSED_BYTE_LENGTH + 1); } } @@ -286,7 +304,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec putInRingBuffer(new AfterFailedOperationEventRecord(timestamp, traceId, orderIndex, objectId, operation, cause, hostApplicationMetadata, - new RuntimeStatisticInformation(timestamp))); + new RuntimeStatisticInformation())); } catch (final IdNotAvailableException e) { putInWaitingMessages(buffer, AfterFailedOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID); @@ -304,7 +322,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec final String operation = stringRegistry.getStringFromId(operationId); putInRingBuffer(new AfterOperationEventRecord(timestamp, traceId, orderIndex, objectId, - operation, hostApplicationMetadata, new RuntimeStatisticInformation(timestamp))); + operation, hostApplicationMetadata, new RuntimeStatisticInformation())); } catch (final IdNotAvailableException e) { putInWaitingMessages(buffer, AfterOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID); @@ -332,8 +350,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec final String operation = stringRegistry.getStringFromId(operationId); putInRingBuffer(new BeforeConstructorEventRecord(timestamp, traceId, orderIndex, - objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation( - timestamp))); + objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation())); } catch (final IdNotAvailableException e) { putInWaitingMessages(buffer, BeforeConstructorEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID); @@ -354,7 +371,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec putInRingBuffer(new AfterFailedConstructorEventRecord(timestamp, traceId, orderIndex, objectId, operation, cause, hostApplicationMetadata, - new RuntimeStatisticInformation(timestamp))); + new RuntimeStatisticInformation())); } catch (final IdNotAvailableException e) { putInWaitingMessages(buffer, AfterFailedConstructorEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID); @@ -372,8 +389,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec final String operation = stringRegistry.getStringFromId(operationId); putInRingBuffer(new AfterConstructorEventRecord(timestamp, traceId, orderIndex, - objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation( - timestamp))); + objectId, operation, hostApplicationMetadata, new RuntimeStatisticInformation())); } catch (final IdNotAvailableException e) { putInWaitingMessages(buffer, AfterConstructorEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID); @@ -381,6 +397,61 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec } + private final void readInBeforeStaticOperationEvent(final ByteBuffer buffer) { + final long timestamp = buffer.getLong(); + final long traceId = buffer.getLong(); + final int orderIndex = buffer.getInt(); + final int operationId = buffer.getInt(); + + try { + final String operation = stringRegistry.getStringFromId(operationId); + + putInRingBuffer(new BeforeStaticOperationEventRecord(timestamp, traceId, orderIndex, + operation, hostApplicationMetadata, new RuntimeStatisticInformation())); + } catch (final IdNotAvailableException e) { + putInWaitingMessages(buffer, + BeforeStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID); + } + } + + private final void readInAfterFailedStaticOperationEvent(final ByteBuffer buffer) { + final long timestamp = buffer.getLong(); + final long traceId = buffer.getLong(); + final int orderIndex = buffer.getInt(); + final int operationId = buffer.getInt(); + final int causeId = buffer.getInt(); + + try { + final String operation = stringRegistry.getStringFromId(operationId); + final String cause = stringRegistry.getStringFromId(causeId); + + putInRingBuffer(new AfterFailedStaticOperationEventRecord(timestamp, traceId, + orderIndex, operation, cause, hostApplicationMetadata, + new RuntimeStatisticInformation())); + } catch (final IdNotAvailableException e) { + putInWaitingMessages(buffer, + AfterFailedStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID); + } + } + + private final void readInAfterStaticOperationEvent(final ByteBuffer buffer) { + final long timestamp = buffer.getLong(); + final long traceId = buffer.getLong(); + final int orderIndex = buffer.getInt(); + final int operationId = buffer.getInt(); + + try { + final String operation = stringRegistry.getStringFromId(operationId); + + putInRingBuffer(new AfterStaticOperationEventRecord(timestamp, traceId, orderIndex, + operation, hostApplicationMetadata, new RuntimeStatisticInformation())); + } catch (final IdNotAvailableException e) { + putInWaitingMessages(buffer, + AfterStaticOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID); + } + + } + private final void putInWaitingMessages(final ByteBuffer buffer, final int length) { final byte[] message = new byte[length]; buffer.position(buffer.position() - length); @@ -411,6 +482,24 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec case AfterOperationEventRecord.CLAZZ_ID: readInAfterOperationEvent(buffer); break; + case BeforeConstructorEventRecord.CLAZZ_ID: + readInBeforeConstructorEvent(buffer); + break; + case AfterFailedConstructorEventRecord.CLAZZ_ID: + readInAfterFailedConstructorEvent(buffer); + break; + case AfterConstructorEventRecord.CLAZZ_ID: + readInAfterConstructorEvent(buffer); + break; + case BeforeStaticOperationEventRecord.CLAZZ_ID: + readInBeforeStaticOperationEvent(buffer); + break; + case AfterFailedStaticOperationEventRecord.CLAZZ_ID: + readInAfterFailedStaticOperationEvent(buffer); + break; + case AfterStaticOperationEventRecord.CLAZZ_ID: + readInAfterStaticOperationEvent(buffer); + break; default: break; } diff --git a/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java b/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java index 9a45257..9f5ec67 100644 --- a/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java +++ b/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java @@ -15,7 +15,7 @@ public class TraceReconstructionBufferTest { final TraceReconstructionBuffer traceReconstructionBuffer = new TraceReconstructionBuffer(); traceReconstructionBuffer.insertEvent(new BeforeOperationEventRecord(1000, 1, 0, 0, "test", new HostApplicationMetaDataRecord("testHost", "testApp"), - new RuntimeStatisticInformation(1000))); + new RuntimeStatisticInformation())); assertTrue(true); // TODO } -- GitLab