/** * {@inheritDoc} */ @Override public Object getAggregationKey(SqlStatementData sqlStatementData) { final int prime = 31; int result = 0; result = (prime * result) + (sqlStatementData.isPreparedStatement() ? 1231 : 1237); result = (prime * result) + ((sqlStatementData.getSql() == null) ? 0 : sqlStatementData.getSql().hashCode()); result = (prime * result) + ((sqlStatementData.getDatabaseUrl() == null) ? 0 : sqlStatementData.getDatabaseUrl().hashCode()); if (includeParameters) { result = (prime * result) + ((sqlStatementData.getParameterValues() == null) ? 0 : sqlStatementData.getParameterValues().hashCode()); } return result; }
/** * {@inheritDoc} */ @Override public List<SqlStatementData> getParameterAggregatedSqlStatements(SqlStatementData sqlStatementData, Date fromDate, Date toDate) { StorageIndexQuery query = sqlDataQueryFactory.getAggregatedSqlStatementsQuery(sqlStatementData, fromDate, toDate); query.setSql(sqlStatementData.getSql()); return super.executeQuery(query, Aggregators.SQL_STATEMENT_DATA_PARAMETER_AGGREGATOR); }
String boldSql = StringUtils.replaceEach(dataToDisplay.getSql(), new String[] { "?", "<", ">", "&" }, new String[] { "<b>?</b>", "<", ">", "&" }); if (CollectionUtils.isNotEmpty(dataToDisplay.getParameterValues())) { int index = 0;
/** * Default constructor. * * @param timerData * the timerData that is taken into account */ public DiagnosisTimerData(final TimerData timerData) { if (timerData == null) { throw new IllegalArgumentException("TimerData cannot be null!"); } this.duration = timerData.getDuration(); this.cpuDuration = timerData.getCpuDuration(); this.exclusiveDuration = timerData.getExclusiveDuration(); if (timerData instanceof SqlStatementData) { SqlStatementData sqlStatementData = (SqlStatementData) timerData; this.metaData.put(MetaDataType.SQL, sqlStatementData.getSql()); } else if (timerData instanceof HttpTimerData) { HttpTimerData httpTimerData = (HttpTimerData) timerData; this.metaData.put(MetaDataType.URI, httpTimerData.getHttpInfo().getUri()); } }
/** * Returns template for {@link SqlStatementData}. * * @param sqlStatementData * Source object. * @param id * Should id be inserted into template. * @param sql * Should SQL query be inserted into template. * @param parameters * Should parameters be inserted into template. * @return Template object. */ protected SqlStatementData getTemplate(SqlStatementData sqlStatementData, boolean id, boolean sql, boolean parameters) { SqlStatementData template = OccurrenceFinderFactory.getEmptyTemplate(sqlStatementData); if (id && (0 != sqlStatementData.getId())) { template.setId(sqlStatementData.getId()); } if (sql && (null != sqlStatementData.getSql())) { template.setSql(sqlStatementData.getSql()); } if (parameters && (null != sqlStatementData.getParameterValues())) { template.setParameterValues(sqlStatementData.getParameterValues()); } return template; }
/** * Tests the functionality of the {@link SqlStringIndexer}. */ @Test public void sqlStringIndexer() { SqlStatementData data = mock(SqlStatementData.class); SqlStringIndexer<DefaultData> indexer = new SqlStringIndexer<>(); when(data.getSql()).thenReturn(RandomStringUtils.random(100)); Object key1 = indexer.getKey(data); when(data.getSql()).thenReturn(RandomStringUtils.random(100)); Object key2 = indexer.getKey(data); assertThat(key1, is(not(key2))); // assert that if max keys is set it will work indexer = new SqlStringIndexer<>(1); when(data.getSql()).thenReturn(RandomStringUtils.random(100)); key1 = indexer.getKey(data); when(data.getSql()).thenReturn(RandomStringUtils.random(100)); key2 = indexer.getKey(data); assertThat(key1, is(key2)); StorageIndexQuery query = mock(StorageIndexQuery.class); assertThat(indexer.getKeys(query), is(emptyArray())); when(query.getSql()).thenReturn(RandomStringUtils.random(100)); Object[] keys = indexer.getKeys(query); assertThat(keys, is(arrayWithSize(1))); assertThat(keys[0], is(notNullValue())); }
@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())); }
assertThat(sqlData.getMin(), is(secondTimerValue - firstTimerValue)); assertThat(sqlData.getMax(), is(secondTimerValue - firstTimerValue)); assertThat(sqlData.getSql(), is((String) parameters[0])); assertThat(sqlData.isCharting(), is(false));
@Test private void ifTheAggregatedObjectHasSQLDataAndIsDefinedInTheMapItMustBeAggregatedToTheDiagnosisAggregator() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 2L); diagnosisDataAggregationPerformer = new DiagnosisDataAggregationPerformer(); SqlStatementData sqlStatementData = new SqlStatementData(new Timestamp(10), 10, 10, 108L); sqlStatementData.setCount(1); sqlStatementData.setSql("blahblahblah"); invocationSequenceData.setSqlStatementData(sqlStatementData); HttpTimerData timerData = new HttpTimerData(new Timestamp(10), 10, 10, 108L); invocationSequenceData.setTimerData(timerData); Object key = new Pair<Long, String>(invocationSequenceData.getMethodIdent(), invocationSequenceData.getSqlStatementData().getSql()); diagnosisDataAggregationPerformer.diagnosisDataAggregationMap.put(key, alreadyAggregatedObject); diagnosisDataAggregationPerformer.aggregateInvocationSequenceData(invocationSequenceData); verify(alreadyAggregatedObject, times(1)).aggregate(invocationSequenceData); }
assertThat(sqlData.getMin(), is(secondTimerValue - firstTimerValue)); assertThat(sqlData.getMax(), is(secondTimerValue - firstTimerValue)); assertThat(sqlData.getSql(), is((String) parameters[0])); assertThat(sqlData.isCharting(), is(false));
@Test private void ifTheAggregatedObjectIsNotDefineInTheMapItMustBeAggregated() { InvocationSequenceData invocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 2L); diagnosisDataAggregationPerformer = new DiagnosisDataAggregationPerformer(); SqlStatementData sqlStatementData = new SqlStatementData(new Timestamp(10), 10, 10, 108L); sqlStatementData.setCount(1); sqlStatementData.setSql("blahblahblah"); invocationSequenceData.setSqlStatementData(sqlStatementData); TimerData timerData = new TimerData(new Timestamp(10), 10, 10, 108L); invocationSequenceData.setTimerData(timerData); Object key = new Pair<Long, String>(invocationSequenceData.getMethodIdent(), invocationSequenceData.getSqlStatementData().getSql()); AggregatedDiagnosisData alreadyAggregatedObject = new AggregatedDiagnosisData(SourceType.TIMERDATA, invocationSequenceData, key); diagnosisDataAggregationPerformer.diagnosisDataAggregationMap.put(key, alreadyAggregatedObject); InvocationSequenceData secondInvocationSequenceData = new InvocationSequenceData(new Timestamp(10L), 10L, 20L, 2L); secondInvocationSequenceData.setTimerData(timerData); List<InvocationSequenceData> invocationSequenceDataList = new ArrayList<>(); invocationSequenceDataList.add(invocationSequenceData); invocationSequenceDataList.add(secondInvocationSequenceData); diagnosisDataAggregationPerformer.aggregateInvocationSequenceDataList(invocationSequenceDataList); List<AggregatedDiagnosisData> resultList = diagnosisDataAggregationPerformer.getAggregationResultList(); assertThat("The list must have 2 aggregated objects", resultList.size(), is(2)); assertThat("The first aggregated object must have the same method ident that the invocationSequenceData", resultList.get(0).getMethodIdent(), equalTo(invocationSequenceData.getMethodIdent())); assertThat("The second aggregated object must have the same method ident that the secondInvocationSequenceData", resultList.get(1).getMethodIdent(), equalTo(secondInvocationSequenceData.getMethodIdent())); } }
/** * Get key for aggregation. * * @param invocationSequenceData * invocationSequenceData to key should be determined * @return key as object */ public Object getAggregationKey(InvocationSequenceData invocationSequenceData) { if (InvocationSequenceDataHelper.hasSQLData(invocationSequenceData)) { return new Pair<Long, String>(invocationSequenceData.getMethodIdent(), invocationSequenceData.getSqlStatementData().getSql()); } else if (InvocationSequenceDataHelper.hasHttpTimerData(invocationSequenceData)) { return new Pair<Long, String>(invocationSequenceData.getMethodIdent(), ((HttpTimerData) invocationSequenceData.getTimerData()).getHttpInfo().getUri()); } else { return invocationSequenceData.getMethodIdent(); } }
if (invAwareData instanceof SqlStatementData) { SqlStatementData sqlData = (SqlStatementData) invAwareData; return "SQL: " + sqlData.getSql(); } else if (invAwareData instanceof RegExAggregatedHttpTimerData) { return "transformed URI: " + ((RegExAggregatedHttpTimerData) invAwareData).getTransformedUri();
/** * {@inheritDoc} */ @Override public IAggregatedData<SqlStatementData> getClone(SqlStatementData sqlStatementData) { AggregatedSqlStatementData clone = new AggregatedSqlStatementData(); clone.setPlatformIdent(sqlStatementData.getPlatformIdent()); clone.setSensorTypeIdent(sqlStatementData.getSensorTypeIdent()); clone.setPreparedStatement(sqlStatementData.isPreparedStatement()); clone.setSql(sqlStatementData.getSql()); clone.setDatabaseProductName(sqlStatementData.getDatabaseProductName()); clone.setDatabaseProductVersion(sqlStatementData.getDatabaseProductVersion()); clone.setDatabaseUrl(sqlStatementData.getDatabaseUrl()); if (includeParameters && (null != sqlStatementData.getParameterValues())) { clone.setParameterValues(new ArrayList<>(sqlStatementData.getParameterValues())); } return clone; }
switch (enumId) { case STATEMENT: String sql = data.getSql().replaceAll("[\r\n]+", " "); return new StyledString(sql); case INVOCATION_AFFILLIATION:
editorPropertiesData.setSensorImage(SensorTypeEnum.SQL.getImage()); editorPropertiesData.setSensorName("Aggregated SQL Statements"); editorPropertiesData.setViewName(dataToNavigateTo.getSql()); editorPropertiesData.setPartNameFlag(PartType.SENSOR); inputDefinition.setEditorPropertiesData(editorPropertiesData); sqlStatementInputDefinitionExtra.setSql(dataToNavigateTo.getSql()); inputDefinition.addInputDefinitonExtra(InputDefinitionExtrasMarkerFactory.SQL_STATEMENT_EXTRAS_MARKER, sqlStatementInputDefinitionExtra);