package rocks.inspectit.server.dao.impl; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import rocks.inspectit.server.dao.ExceptionSensorDataDao; import rocks.inspectit.shared.all.communication.data.AggregatedExceptionSensorData; import rocks.inspectit.shared.all.communication.data.ExceptionSensorData; import rocks.inspectit.shared.all.indexing.IIndexQuery; import rocks.inspectit.shared.cs.communication.comparator.DefaultDataComparatorEnum; import rocks.inspectit.shared.cs.indexing.AbstractBranch; import rocks.inspectit.shared.cs.indexing.aggregation.Aggregators; import rocks.inspectit.shared.cs.indexing.query.factory.impl.ExceptionSensorDataQueryFactory; /** * {@link ExceptionSensorDataDao} that works with the data from the buffer. <br> * The query-Method of {@link AbstractBranch} which uses fork&join is executed, because much * exception-data is expected and querying with fork&join will be faster<br> * <br> * in getExceptionTree(ExceptionSensorData template) the query-Method without fork&join is used, * because only one exception tree per invocation will be queried. <br> * * @author Ivan Senic * */ @Repository public class BufferExceptionSensorDataDaoImpl extends AbstractBufferDataDao<ExceptionSensorData> implements ExceptionSensorDataDao { /** * Index query provider. */ @Autowired private ExceptionSensorDataQueryFactory<IIndexQuery> exceptionSensorDataQueryFactory; /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getUngroupedExceptionOverview(ExceptionSensorData template, int limit, Comparator<? super ExceptionSensorData> comparator) { return this.getUngroupedExceptionOverview(template, limit, null, null, comparator); } /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getUngroupedExceptionOverview(ExceptionSensorData template, int limit, Date fromDate, Date toDate, Comparator<? super ExceptionSensorData> comparator) { IIndexQuery query = exceptionSensorDataQueryFactory.getUngroupedExceptionOverviewQuery(template, limit, fromDate, toDate); if (null != comparator) { return super.executeQuery(query, comparator, limit, true); } else { return super.executeQuery(query, DefaultDataComparatorEnum.TIMESTAMP, limit, true); } } /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getUngroupedExceptionOverview(ExceptionSensorData template, Comparator<? super ExceptionSensorData> comparator) { return this.getUngroupedExceptionOverview(template, -1, null, null, comparator); } /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getUngroupedExceptionOverview(ExceptionSensorData template, Date fromDate, Date toDate, Comparator<? super ExceptionSensorData> comparator) { return this.getUngroupedExceptionOverview(template, -1, fromDate, toDate, comparator); } /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getExceptionTree(ExceptionSensorData template) { IIndexQuery query = exceptionSensorDataQueryFactory.getExceptionTreeQuery(template); List<ExceptionSensorData> results = super.executeQuery(query, false); Collections.reverse(results); return results; } /** * {@inheritDoc} */ @Override public List<AggregatedExceptionSensorData> getDataForGroupedExceptionOverview(ExceptionSensorData template) { return this.getDataForGroupedExceptionOverview(template, null, null); } /** * {@inheritDoc} */ @Override public List<AggregatedExceptionSensorData> getDataForGroupedExceptionOverview(ExceptionSensorData template, Date fromDate, Date toDate) { IIndexQuery query = exceptionSensorDataQueryFactory.getDataForGroupedExceptionOverviewQuery(template, fromDate, toDate); List<ExceptionSensorData> results = super.executeQuery(query, Aggregators.GROUP_EXCEPTION_OVERVIEW_AGGREGATOR, true); List<AggregatedExceptionSensorData> aggResults = new ArrayList<>(); for (ExceptionSensorData exData : results) { if (exData instanceof AggregatedExceptionSensorData) { aggResults.add((AggregatedExceptionSensorData) exData); } } return aggResults; } /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getStackTraceMessagesForThrowableType(ExceptionSensorData template) { IIndexQuery query = exceptionSensorDataQueryFactory.getStackTraceMessagesForThrowableTypeQuery(template); return super.executeQuery(query, Aggregators.DISTINCT_STACK_TRACES_AGGREGATOR, true); } }