/** * Checks whether the passed {@link #InvocationSequenceData} is a <code>Root * Cause</code>. * * @param invocation * The {@link InvocationSequenceData} that is investigated. * @return Whether the {@link InvocationSequenceData} is a <code>Root Cause</code>. */ private boolean isCauseInvocation(InvocationSequenceData invocation) { Object key = diagnosisDataAggregator.getAggregationKey(invocation); if (key.equals(rootCause.getAggregationKey())) { return true; } return false; }
/** * Add one InvocationSequenceData to the aggregation. * * @param invocationSequenceData * invocationSequenceData to be aggregated */ public void aggregateInvocationSequenceData(InvocationSequenceData invocationSequenceData) { Object key = DIAGNOSIS_DATA_AGGREGATOR.getAggregationKey(invocationSequenceData); AggregatedDiagnosisData aggregatedObject = diagnosisDataAggregationMap.get(key); if (null != aggregatedObject) { DIAGNOSIS_DATA_AGGREGATOR.aggregate(aggregatedObject, invocationSequenceData); } else { aggregatedObject = DIAGNOSIS_DATA_AGGREGATOR.getAggregatedDiagnosisData(invocationSequenceData); diagnosisDataAggregationMap.put(key, aggregatedObject); } }
/** * Convert a {@link InvocationSequenceData} to a {@link AggregatedDiagnosisData}. * * @param invocationSequenceData * input invocationSequenceData * @return AggregatedDiagnosisData based on invocationSequenceData */ public AggregatedDiagnosisData getAggregatedDiagnosisData(InvocationSequenceData invocationSequenceData) { if (InvocationSequenceDataHelper.hasHttpTimerData(invocationSequenceData)) { return new AggregatedDiagnosisData(SourceType.HTTP, invocationSequenceData, getAggregationKey(invocationSequenceData)); } else if (InvocationSequenceDataHelper.hasSQLData(invocationSequenceData)) { return new AggregatedDiagnosisData(SourceType.DATABASE, invocationSequenceData, getAggregationKey(invocationSequenceData)); } else if (InvocationSequenceDataHelper.hasTimerData(invocationSequenceData)) { return new AggregatedDiagnosisData(SourceType.TIMERDATA, invocationSequenceData, getAggregationKey(invocationSequenceData)); } else { throw new IllegalArgumentException("No timer data available!"); } }
@Test private void musteReturnAnObjectWithALongStringIfTheTimerDataHasNotHttpTimerDataOrSqlData() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 108L); TimerData timerData = new TimerData(); invocationSequenceData.setTimerData(timerData); long aggregationKey = (long) DiagnosisDataAggregator.getInstance().getAggregationKey(invocationSequenceData); assertThat("The returned object must be the method ident of the invocationsequencedata", aggregationKey, is(invocationSequenceData.getMethodIdent())); } }
@Test private void musteReturnAnObjectWithAPairLongStringIfTheTimerDataHasSqlData() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 108L); SqlStatementData sqlStatementData = new SqlStatementData(new Timestamp(10), 10, 10, 108L); sqlStatementData.setCount(1); sqlStatementData.setSql("blahblahblah"); invocationSequenceData.setSqlStatementData(sqlStatementData); TimerData timerData = new TimerData(); invocationSequenceData.setTimerData(timerData); Pair<Long, String> aggregationKey = (Pair<Long, String>) DiagnosisDataAggregator.getInstance().getAggregationKey(invocationSequenceData); assertThat("The string of the pair must be the sql data", aggregationKey.getSecond(), is(sqlStatementData.getSql())); }
@Test private void musteReturnAnObjectWithAPairLongStringIfTheTimerDataHasHttpTimerData() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 108L); HttpTimerData timerData = new HttpTimerData(new Timestamp(10), 10, 10, 108L); HttpInfo httpInfo = new HttpInfo("URI", "requestMethod", "headerValue"); timerData.setHttpInfo(httpInfo); invocationSequenceData.setTimerData(timerData); Pair<Long, String> aggregationKey = (Pair<Long, String>) DiagnosisDataAggregator.getInstance().getAggregationKey(invocationSequenceData); assertThat("The string of the pair must be the sql data", aggregationKey.getSecond(), is(timerData.getHttpInfo().getUri())); }