package rocks.inspectit.ui.rcp.repository.service.storage; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; import rocks.inspectit.shared.all.communication.data.AggregatedExceptionSensorData; import rocks.inspectit.shared.all.communication.data.ExceptionSensorData; import rocks.inspectit.shared.cs.cmr.service.IExceptionDataAccessService; import rocks.inspectit.shared.cs.communication.comparator.DefaultDataComparatorEnum; import rocks.inspectit.shared.cs.communication.comparator.ResultComparator; import rocks.inspectit.shared.cs.indexing.aggregation.Aggregators; import rocks.inspectit.shared.cs.indexing.query.factory.impl.ExceptionSensorDataQueryFactory; import rocks.inspectit.shared.cs.indexing.storage.IStorageTreeComponent; import rocks.inspectit.shared.cs.indexing.storage.impl.StorageIndexQuery; /** * {@link IExceptionDataAccessService} for storage purposes. * * @author Ivan Senic * */ public class StorageExceptionDataAccessService extends AbstractStorageService<ExceptionSensorData> implements IExceptionDataAccessService { /** * Indexing tree. */ private IStorageTreeComponent<ExceptionSensorData> indexingTree; /** * Index query provider. */ private ExceptionSensorDataQueryFactory<StorageIndexQuery> exceptionSensorDataQueryFactory; /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getUngroupedExceptionOverview(ExceptionSensorData template, int limit, ResultComparator<ExceptionSensorData> resultComparator) { return this.getUngroupedExceptionOverview(template, limit, null, null, resultComparator); } /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getUngroupedExceptionOverview(ExceptionSensorData template, int limit, Date fromDate, Date toDate, ResultComparator<ExceptionSensorData> resultComparator) { StorageIndexQuery query = exceptionSensorDataQueryFactory.getUngroupedExceptionOverviewQuery(template, limit, fromDate, toDate); if (null != resultComparator) { resultComparator.setCachedDataService(getStorageRepositoryDefinition().getCachedDataService()); return super.executeQuery(query, resultComparator, limit); } else { return super.executeQuery(query, DefaultDataComparatorEnum.TIMESTAMP, limit); } } /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getUngroupedExceptionOverview(ExceptionSensorData template, ResultComparator<ExceptionSensorData> resultComparator) { return this.getUngroupedExceptionOverview(template, -1, null, null, resultComparator); } /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getUngroupedExceptionOverview(ExceptionSensorData template, Date fromDate, Date toDate, ResultComparator<ExceptionSensorData> resultComparator) { return this.getUngroupedExceptionOverview(template, -1, fromDate, toDate, resultComparator); } /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getExceptionTree(ExceptionSensorData template) { // here we have a problem because we have to de-serialize every exception to find the right // one, we need to check if we can change this method StorageIndexQuery query = exceptionSensorDataQueryFactory.getExceptionTreeQuery(template); List<ExceptionSensorData> results = super.executeQuery(query); 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) { StorageIndexQuery query = exceptionSensorDataQueryFactory.getDataForGroupedExceptionOverviewQuery(template, fromDate, toDate); List<ExceptionSensorData> resultList = super.executeQuery(query, Aggregators.GROUP_EXCEPTION_OVERVIEW_AGGREGATOR); List<AggregatedExceptionSensorData> filterList = new ArrayList<>(resultList.size()); for (ExceptionSensorData data : resultList) { if (data instanceof AggregatedExceptionSensorData) { filterList.add((AggregatedExceptionSensorData) data); } } return filterList; } /** * {@inheritDoc} */ @Override public List<ExceptionSensorData> getStackTraceMessagesForThrowableType(ExceptionSensorData template) { // same problem again, we need to de-serialize all exceptions StorageIndexQuery query = exceptionSensorDataQueryFactory.getStackTraceMessagesForThrowableTypeQuery(template); return super.executeQuery(query, Aggregators.DISTINCT_STACK_TRACES_AGGREGATOR); } /** * {@inheritDoc} */ @Override protected IStorageTreeComponent<ExceptionSensorData> getIndexingTree() { return indexingTree; } /** * @param indexingTree * the indexingTree to set */ public void setIndexingTree(IStorageTreeComponent<ExceptionSensorData> indexingTree) { this.indexingTree = indexingTree; } /** * @param exceptionSensorDataQueryFactory * the exceptionSensorDataQueryFactory to set */ public void setExceptionSensorDataQueryFactory(ExceptionSensorDataQueryFactory<StorageIndexQuery> exceptionSensorDataQueryFactory) { this.exceptionSensorDataQueryFactory = exceptionSensorDataQueryFactory; } }