From 037a87ecdec180c4bbc0ece96d092c724d84de17 Mon Sep 17 00:00:00 2001 From: Florian Fittkau <ffi@informatik.uni-kiel.de> Date: Mon, 4 May 2015 14:43:43 +0200 Subject: [PATCH] jdbc monitoring --- .../reader/TCPReaderOneClient.java | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java index d23e075..83d3565 100644 --- a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java +++ b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java @@ -18,6 +18,9 @@ import explorviz.live_trace_processing.record.IRecord; import explorviz.live_trace_processing.record.event.constructor.AfterConstructorEventRecord; import explorviz.live_trace_processing.record.event.constructor.AfterFailedConstructorEventRecord; import explorviz.live_trace_processing.record.event.constructor.BeforeConstructorEventRecord; +import explorviz.live_trace_processing.record.event.jdbc.AfterFailedJDBCOperationEventRecord; +import explorviz.live_trace_processing.record.event.jdbc.AfterJDBCOperationEventRecord; +import explorviz.live_trace_processing.record.event.jdbc.BeforeJDBCOperationEventRecord; 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; @@ -278,6 +281,34 @@ class TCPReaderOneClient implements Runnable { buffer.compact(); return; } + case BeforeJDBCOperationEventRecord.CLAZZ_ID: { + if (buffer.remaining() >= BeforeJDBCOperationEventRecord.COMPRESSED_BYTE_LENGTH) { + readInBeforeJDBCOperationEvent(buffer); + break; + } + buffer.position(buffer.position() - 1); + buffer.compact(); + return; + } + case AfterFailedJDBCOperationEventRecord.CLAZZ_ID: { + if (buffer.remaining() >= AfterFailedJDBCOperationEventRecord.COMPRESSED_BYTE_LENGTH) { + readInAfterFailedJDBCOperationEvent(buffer); + break; + } + buffer.position(buffer.position() - 1); + buffer.compact(); + return; + + } + case AfterJDBCOperationEventRecord.CLAZZ_ID: { + if (buffer.remaining() >= AfterJDBCOperationEventRecord.COMPRESSED_BYTE_LENGTH) { + readInAfterJDBCOperationEvent(buffer); + break; + } + buffer.position(buffer.position() - 1); + buffer.compact(); + return; + } case BeforeOperationEventRecord.CLAZZ_ID_FROM_WORKER: { if (buffer.remaining() >= 4) { final int recordSize = buffer.getInt(); @@ -901,6 +932,66 @@ class TCPReaderOneClient implements Runnable { hostApplicationMetadata)); } + private final void readInBeforeJDBCOperationEvent(final ByteBuffer buffer) { + final long traceId = buffer.getLong(); + final int orderIndex = buffer.getInt(); + final int objectId = buffer.getInt(); + final int operationId = buffer.getInt(); + final int clazzId = buffer.getInt(); + final int interfaceId = buffer.getInt(); + + final int sqlStatementId = buffer.getInt(); + + try { + final String operation = stringRegistry.getStringFromId(operationId); + final String clazz = stringRegistry.getStringFromId(clazzId); + final String implementedInterface = stringRegistry.getStringFromId(interfaceId); + + final String sqlStatement = stringRegistry.getStringFromId(sqlStatementId); + + putInQueue(new BeforeJDBCOperationEventRecord(traceId, orderIndex, objectId, operation, + clazz, implementedInterface, sqlStatement, hostApplicationMetadata)); + } catch (final IdNotAvailableException e) { + putInWaitingMessages(buffer, BeforeJDBCOperationEventRecord.COMPRESSED_BYTE_LENGTH + 1); + } + } + + private final void readInAfterFailedJDBCOperationEvent(final ByteBuffer buffer) { + final long timestamp = buffer.getLong(); + final long traceId = buffer.getLong(); + final int orderIndex = buffer.getInt(); + final int causeId = buffer.getInt(); + + try { + final String cause = stringRegistry.getStringFromId(causeId); + + putInQueue(new AfterFailedJDBCOperationEventRecord(timestamp, traceId, orderIndex, + cause, hostApplicationMetadata)); + } catch (final IdNotAvailableException e) { + putInWaitingMessages(buffer, + AfterFailedJDBCOperationEventRecord.COMPRESSED_BYTE_LENGTH_WITH_CLAZZ_ID); + } + } + + private final void readInAfterJDBCOperationEvent(final ByteBuffer buffer) { + final long timestamp = buffer.getLong(); + final long traceId = buffer.getLong(); + final int orderIndex = buffer.getInt(); + + final int formattedReturnValueId = buffer.getInt(); + + try { + final String formattedReturnValue = stringRegistry + .getStringFromId(formattedReturnValueId); + + putInQueue(new AfterJDBCOperationEventRecord(timestamp, traceId, orderIndex, + formattedReturnValue, hostApplicationMetadata)); + } catch (final IdNotAvailableException e) { + putInWaitingMessages(buffer, + AfterJDBCOperationEventRecord.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); @@ -968,6 +1059,15 @@ class TCPReaderOneClient implements Runnable { case AfterReceivedRemoteCallRecord.CLAZZ_ID: readInAfterReceivedRemoteCallEvent(buffer); break; + case BeforeJDBCOperationEventRecord.CLAZZ_ID: + readInBeforeJDBCOperationEvent(buffer); + break; + case AfterFailedJDBCOperationEventRecord.CLAZZ_ID: + readInAfterFailedJDBCOperationEvent(buffer); + break; + case AfterJDBCOperationEventRecord.CLAZZ_ID: + readInAfterJDBCOperationEvent(buffer); + break; default: break; } -- GitLab