package rocks.inspectit.server.dao.impl; import java.util.ArrayList; import java.util.Collection; 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.InvocationDataDao; import rocks.inspectit.shared.all.communication.data.InvocationSequenceData; 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.query.factory.impl.InvocationSequenceDataQueryFactory; /** * Implementation of {@link InvocationDataDao} that works with the data from the buffer indexing * tree. <br> * The query-Method of {@link AbstractBranch} without fork&join is executed, because there isn't * much data expected.<br> * * @author Ivan Senic * */ @Repository public class BufferInvocationDataDaoImpl extends AbstractBufferDataDao<InvocationSequenceData> implements InvocationDataDao { /** * Index query provider. */ @Autowired private InvocationSequenceDataQueryFactory<IIndexQuery> invocationDataQueryFactory; /** * {@inheritDoc} */ @Override public List<InvocationSequenceData> getInvocationSequenceOverview(long platformId, long methodId, int limit, Comparator<? super InvocationSequenceData> comparator) { return this.getInvocationSequenceOverview(platformId, methodId, limit, null, null, comparator); } /** * {@inheritDoc} */ @Override public List<InvocationSequenceData> getInvocationSequenceOverview(long platformId, int limit, Comparator<? super InvocationSequenceData> comparator) { return this.getInvocationSequenceOverview(platformId, 0, limit, comparator); } /** * {@inheritDoc} */ @Override public List<InvocationSequenceData> getInvocationSequenceOverview(long platformId, int limit, Date fromDate, Date toDate, Comparator<? super InvocationSequenceData> comparator) { return this.getInvocationSequenceOverview(platformId, 0, limit, fromDate, toDate, comparator); } /** * {@inheritDoc} */ @Override public List<InvocationSequenceData> getInvocationSequenceOverview(long platformId, long methodId, int limit, Date fromDate, Date toDate, Comparator<? super InvocationSequenceData> comparator) { IIndexQuery query = invocationDataQueryFactory.getInvocationSequences(platformId, methodId, fromDate, toDate); List<InvocationSequenceData> resultWithChildren; if (null != comparator) { resultWithChildren = super.executeQuery(query, comparator, limit, false); } else { resultWithChildren = super.executeQuery(query, DefaultDataComparatorEnum.TIMESTAMP, limit, false); } List<InvocationSequenceData> realResults = new ArrayList<>(resultWithChildren.size()); for (InvocationSequenceData invocationSequenceData : resultWithChildren) { realResults.add(invocationSequenceData.getClonedInvocationSequence()); } return realResults; } /** * {@inheritDoc} */ @Override public List<InvocationSequenceData> getInvocationSequenceOverview(long platformId, Collection<Long> invocationIdCollection, int limit, Comparator<? super InvocationSequenceData> comparator) { IIndexQuery query = invocationDataQueryFactory.getInvocationSequences(platformId, invocationIdCollection, limit); List<InvocationSequenceData> resultWithChildren; if (null != comparator) { resultWithChildren = super.executeQuery(query, comparator, limit, false); } else { resultWithChildren = super.executeQuery(query, DefaultDataComparatorEnum.TIMESTAMP, limit, false); } List<InvocationSequenceData> realResults = new ArrayList<>(resultWithChildren.size()); for (InvocationSequenceData invocationSequenceData : resultWithChildren) { realResults.add(invocationSequenceData.getClonedInvocationSequence()); } return realResults; } /** * {@inheritDoc} */ @Override public List<InvocationSequenceData> getInvocationSequenceOverview(long platformId, Date fromDate, Date toDate, long minId, int limit, int businessTrxId, int applicationId, // NOCHK Comparator<? super InvocationSequenceData> comparator) { IIndexQuery query = invocationDataQueryFactory.getInvocationSequences(platformId, fromDate, toDate, minId); List<InvocationSequenceData> resultWithChildren; if (null != comparator) { resultWithChildren = super.executeQuery(query, comparator, limit, false); } else { resultWithChildren = super.executeQuery(query, DefaultDataComparatorEnum.TIMESTAMP, limit, false); } List<InvocationSequenceData> realResults = new ArrayList<InvocationSequenceData>(resultWithChildren.size()); for (InvocationSequenceData invocationSequenceData : resultWithChildren) { realResults.add(invocationSequenceData.getClonedInvocationSequence()); } return realResults; } /** * {@inheritDoc} */ @Override public InvocationSequenceData getInvocationSequenceDetail(InvocationSequenceData template) { return super.getIndexingTree().get(template); } /** * {@inheritDoc} */ @Override public List<InvocationSequenceData> getInvocationSequenceDetail(long platformId, long methodId, int limit, Date fromDate, Date toDate, Comparator<? super InvocationSequenceData> comparator) { IIndexQuery query = invocationDataQueryFactory.getInvocationSequences(platformId, methodId, fromDate, toDate); if (null != comparator) { return super.executeQuery(query, comparator, limit, false); } else { return super.executeQuery(query, DefaultDataComparatorEnum.TIMESTAMP, limit, false); } } /** * {@inheritDoc} */ @Override public Collection<InvocationSequenceData> getInvocationSequenceDetail(long traceId) { IIndexQuery query = invocationDataQueryFactory.getInvocationSequences(traceId); return super.executeQuery(query, true); } }