package rocks.inspectit.server.dao.impl; import java.util.Collection; import java.util.Date; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import rocks.inspectit.shared.all.indexing.IIndexQuery; import rocks.inspectit.shared.all.tracing.data.AbstractSpan; import rocks.inspectit.shared.all.tracing.data.SpanIdent; import rocks.inspectit.shared.cs.communication.comparator.DefaultDataComparatorEnum; import rocks.inspectit.shared.cs.communication.comparator.ResultComparator; import rocks.inspectit.shared.cs.indexing.query.factory.impl.SpanQueryFactory; /** * DataDao that searches for the {@link AbstractSpan}s in the buffer. * * @author Ivan Senic * */ @Component public class BufferSpanDaoImpl extends AbstractBufferDataDao<AbstractSpan> { /** * Index query provider. */ @Autowired private SpanQueryFactory<IIndexQuery> spanQueryFactory; /** * Returns root spans for given time-frame. * * @param limit * number of results returned by service. Value <code>-1</code> means no limit. * @param fromDate * From date to search for. Can be <code>null</code> not to set any boundary. * @param toDate * To date to search for. Can be <code>null</code> not to set any boundary. * @param resultComparator * Comparator that will be used to sort the results. Can be <code>null</code> and in * that case default time-stamp sorting will be done. * @return All root spans. */ public Collection<AbstractSpan> getRootSpans(int limit, Date fromDate, Date toDate, ResultComparator<AbstractSpan> resultComparator) { IIndexQuery query = spanQueryFactory.getRootSpansQuery(fromDate, toDate); if (null != resultComparator) { return super.executeQuery(query, resultComparator, limit, false); } else { return super.executeQuery(query, DefaultDataComparatorEnum.TIMESTAMP, limit, false); } } /** * Returns spans that belong to the given trace. * * @param traceId * Trace id. * @return All spans for the trace. */ public Collection<AbstractSpan> getSpans(long traceId) { IIndexQuery query = spanQueryFactory.getSpans(traceId); return getIndexingTree().query(query); } /** * Returns the span with given span ident. * * @param spanIdent * {@link SpanIdent} * @return Span with given span ident. */ public AbstractSpan get(SpanIdent spanIdent) { IIndexQuery query = spanQueryFactory.get(spanIdent); Collection<AbstractSpan> results = getIndexingTree().query(query); if (CollectionUtils.isNotEmpty(results)) { return results.iterator().next(); } else { return null; } } }