/** * {@inheritDoc} */ @Override public int hashCode() { int code = 0; code += ((int)this.getTimestamp()); code += ((int)this.getTraceId()); code += ((int)this.getOrderIndex()); return code; }
/** * {@inheritDoc} */ @Override public boolean equals(final Object obj) { if (obj == null) return false; if (obj == this) return true; if (obj.getClass() != this.getClass()) return false; final AbstractTraceEvent castedRecord = (AbstractTraceEvent) obj; if (this.getLoggingTimestamp() != castedRecord.getLoggingTimestamp()) return false; if (this.getTimestamp() != castedRecord.getTimestamp()) return false; if (this.getTraceId() != castedRecord.getTraceId()) return false; if (this.getOrderIndex() != castedRecord.getOrderIndex()) return false; return true; }
public void insertEvent(final AbstractTraceEvent event) { final long myTraceId = event.getTraceId(); if (this.repairEventBasedTracesEnabled) { if ((event instanceof CallOperationEvent) || (event instanceof ConstructionEvent) this.traceId = myTraceId; } else if (this.traceId != myTraceId) { LOG.error("Invalid traceId! Expected: " + this.traceId + " but found: " + myTraceId + " in event " + event.toString()); this.damaged = true; final long loggingTimestamp = receivedEvent.getTimestamp(); if (loggingTimestamp > this.maxLoggingTimestamp) { this.maxLoggingTimestamp = loggingTimestamp; this.minLoggingTimestamp = loggingTimestamp; final int orderIndex = receivedEvent.getOrderIndex(); if (orderIndex > this.maxOrderIndex) { this.maxOrderIndex = orderIndex;
final Stack<ExecutionInformation> tmpExecutionStack = new Stack<>(); if (!this.eventStack.isEmpty()) { final long lastTimeStamp = this.eventStack.peek().getTimestamp(); while (!this.eventStack.isEmpty()) { // reverse order tmpEventStack.push(this.eventStack.pop()); executionInformation.getEoi(), executionInformation.getEss(), currentEvent.getTimestamp(), lastTimeStamp, !this.ignoreAssumedCalls, currentEvent instanceof CallConstructorEvent);
loggingTimestamp = -1; } else if (record instanceof AbstractTraceEvent) { traceId = ((AbstractTraceEvent) record).getTraceId(); traceBuffer = this.traceId2trace.get(traceId); if (traceBuffer == null) { // first record for this id! loggingTimestamp = ((AbstractTraceEvent) record).getTimestamp(); } else { return; // invalid type which should not happen due to the specified eventTypes
@Override protected long getRecordsTraceId(final AbstractTraceEvent record) { return record.getTraceId(); }
for (final AbstractTraceEvent event : traceEventRecords.getTraceEvents()) { expectedOrderIndex += 1; // increment in each iteration -> 0 is the first real value if (event.getOrderIndex() != expectedOrderIndex) { this.logger.error("Found event with wrong orderIndex. Found: {} expected: {}", event.getOrderIndex(), (expectedOrderIndex - 1)); continue; // simply ignore wrong event if (event.getTraceId() != traceId) { this.logger.error("Found event with wrong traceId. Found: {} expected: {}", event.getTraceId(), traceId); continue; // simply ignore wrong event
@Override public int compare(final AbstractTraceEvent o1, final AbstractTraceEvent o2) { return o1.getOrderIndex() - o2.getOrderIndex(); } }
final Stack<ExecutionInformation> tmpExecutionStack = new Stack<ExecutionInformation>(); if (!this.eventStack.isEmpty()) { final long lastTimeStamp = this.eventStack.peek().getTimestamp(); while (!this.eventStack.isEmpty()) { // reverse order tmpEventStack.push(this.eventStack.pop()); executionInformation.getEoi(), executionInformation.getEss(), currentEvent.getTimestamp(), lastTimeStamp, !this.ignoreAssumedCalls, currentEvent instanceof CallConstructorEvent);
loggingTimestamp = -1; } else if (record instanceof AbstractTraceEvent) { traceId = ((AbstractTraceEvent) record).getTraceId(); traceBuffer = this.traceId2trace.get(traceId); if (traceBuffer == null) { // first record for this id! loggingTimestamp = ((AbstractTraceEvent) record).getTimestamp(); } else { return; // invalid type which should not happen due to the specified eventTypes
/** * This method represents the input port for the invalid traces. * * @param invalidTrace * The next trace. */ @InputPort(name = INPUT_PORT_NAME_INVALID, eventTypes = { TraceEventRecords.class }, description = "Receives invalid event record traces") public void inputInvalidTrace(final TraceEventRecords invalidTrace) { if (this.logInvalidTraces) { this.logger.error("Invalid trace: {}", invalidTrace); } final TraceMetadata trace = invalidTrace.getTraceMetadata(); if (trace != null) { super.reportError(invalidTrace.getTraceMetadata().getTraceId()); } else { final AbstractTraceEvent[] events = invalidTrace.getTraceEvents(); if ((events != null) && (events.length > 0)) { super.reportError(events[0].getTraceId()); } else { super.reportError(TRACE_ID_IF_NONE); // we can't do any better } } } }
for (final AbstractTraceEvent event : traceEventRecords.getTraceEvents()) { expectedOrderIndex += 1; // increment in each iteration -> 0 is the first real value if (event.getOrderIndex() != expectedOrderIndex) { this.log.error("Found event with wrong orderIndex. Found: " + event.getOrderIndex() + " expected: " + (expectedOrderIndex - 1)); continue; // simply ignore wrong event if (event.getTraceId() != traceId) { this.log.error("Found event with wrong traceId. Found: " + event.getTraceId() + " expected: " + traceId); continue; // simply ignore wrong event
@Override public int compare(final AbstractTraceEvent o1, final AbstractTraceEvent o2) { return o1.getOrderIndex() - o2.getOrderIndex(); } }
public void insertEvent(final AbstractTraceEvent event) { final long myTraceId = event.getTraceId(); if (this.repairEventBasedTracesEnabled) { if ((event instanceof CallOperationEvent) || (event instanceof ConstructionEvent) this.damaged = true; final long loggingTimestamp = receivedEvent.getTimestamp(); if (loggingTimestamp > this.maxLoggingTimestamp) { this.maxLoggingTimestamp = loggingTimestamp; this.minLoggingTimestamp = loggingTimestamp; final int orderIndex = receivedEvent.getOrderIndex(); if (orderIndex > this.maxOrderIndex) { this.maxOrderIndex = orderIndex;
if (this.getLoggingTimestamp() != castedRecord.getLoggingTimestamp()) { return false; if (this.getTimestamp() != castedRecord.getTimestamp()) { return false; if (this.getTraceId() != castedRecord.getTraceId()) { return false; if (this.getOrderIndex() != castedRecord.getOrderIndex()) { return false;
@Test public void testTraceShorterThanMaxDurationPasses() throws IllegalStateException, AnalysisConfigurationException { final TraceEventRecords bookstoreTrace = BookstoreEventRecordFactory.validSyncTraceBeforeAfterEvents(START_TIME, TRACE_ID, SESSION_ID, HOSTNAME); Assert.assertEquals(TEST_INVALID, START_TIME, bookstoreTrace.getTraceEvents()[0].getTimestamp()); final long traceDuration = bookstoreTrace.getTraceEvents()[bookstoreTrace.getTraceEvents().length - 1].getTimestamp() - START_TIME; this.runTest(bookstoreTrace, traceDuration + 1, Long.MAX_VALUE); }
/** * This method represents the input port for the invalid traces. * * @param invalidTrace * The next trace. */ @InputPort(name = INPUT_PORT_NAME_INVALID, eventTypes = { TraceEventRecords.class }, description = "Receives invalid event record traces") public void inputInvalidTrace(final TraceEventRecords invalidTrace) { if (this.logInvalidTraces) { this.log.error("Invalid trace: " + invalidTrace); } final TraceMetadata trace = invalidTrace.getTraceMetadata(); if (trace != null) { super.reportError(invalidTrace.getTraceMetadata().getTraceId()); } else { final AbstractTraceEvent[] events = invalidTrace.getTraceEvents(); if ((events != null) && (events.length > 0)) { super.reportError(events[0].getTraceId()); } else { super.reportError(TRACE_ID_IF_NONE); // we can't do any better } } } }
private boolean isPrevEventMatchingCall(final BeforeOperationEvent beforeOperationEvent, final AbstractTraceEvent prevEvent, final Class<? extends CallOperationEvent> callClass) { if ((prevEvent != null) && callClass.isAssignableFrom(prevEvent.getClass()) && (prevEvent.getOrderIndex() == (beforeOperationEvent.getOrderIndex() - 1))) { if (this.callsReferencedOperationOf((CallOperationEvent) prevEvent, beforeOperationEvent)) { return true; } else if (this.enhanceCallDetection) { // perhaps we don't find a perfect match, but can guess one! final boolean isConstructor = beforeOperationEvent instanceof BeforeConstructorEvent; final CallOperationEvent callEvent = (CallOperationEvent) prevEvent; final Signature callSignature = ClassOperationSignaturePair.splitOperationSignatureStr(callEvent.getCalleeOperationSignature(), isConstructor && this.enhanceJavaConstructors).getSignature(); final Signature afterSignature = ClassOperationSignaturePair.splitOperationSignatureStr(beforeOperationEvent.getOperationSignature(), isConstructor && this.enhanceJavaConstructors).getSignature(); if (callSignature.equals(afterSignature) && callEvent.getCalleeClassSignature().equals(beforeOperationEvent.getClassSignature())) { TraceEventRecords2ExecutionAndMessageTraceFilter.getLogger().debug("Guessed call of \n\t{}\n\t{}", callEvent, beforeOperationEvent); return true; } } } return false; }
public void checkIfAfterEventsMissingThenRepair(final AbstractTraceEvent event) { int orderIndex = event.getOrderIndex(); final boolean alreadyRepairedSomeEvents = orderIndex <= this.maxOrderIndex; final String opSignature = beforeEvent.getOperationSignature(); final String classSignature = beforeEvent.getClassSignature(); final long timestamp = event.getTimestamp(); final long traceID = event.getTraceId(); final String opSignature = ((AfterOperationEvent) event).getOperationSignature(); final String classSignature = ((AfterOperationEvent) event).getClassSignature(); final long timestamp = event.getTimestamp(); final long traceID = event.getTraceId();
@Test public void testTraceLongerThanMaxDurationPasses() throws IllegalStateException, AnalysisConfigurationException { final TraceEventRecords bookstoreTrace = BookstoreEventRecordFactory.validSyncTraceBeforeAfterEvents(START_TIME, TRACE_ID, SESSION_ID, HOSTNAME); Assert.assertEquals(TEST_INVALID, START_TIME, bookstoreTrace.getTraceEvents()[0].getTimestamp()); final long traceDuration = bookstoreTrace.getTraceEvents()[bookstoreTrace.getTraceEvents().length - 1].getTimestamp() - START_TIME; this.runTestFailed(bookstoreTrace, traceDuration - 5, Long.MAX_VALUE); }