package rocks.inspectit.shared.cs.indexing.query.factory.impl; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import org.springframework.stereotype.Component; import rocks.inspectit.shared.all.communication.ExceptionEvent; 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.indexing.query.factory.AbstractQueryFactory; import rocks.inspectit.shared.cs.indexing.restriction.impl.IndexQueryRestrictionFactory; /** * Factory for all queries for the {@link ExceptionSensorData}. * * @author Ivan Senic * * @param <E> */ @Component public class ExceptionSensorDataQueryFactory<E extends IIndexQuery> extends AbstractQueryFactory<E> { /** * Returns a query for a list of {@link ExceptionSensorData} objects which are between the from * and to {@link Date} objects. This list can be used to get an overview over recorded * Exceptions in a target application. * * @param template * The template data object. * @param limit * The limit/size of the list. * @param fromDate * The start date. * @param toDate * The end date. * @return Query for list of {@link ExceptionSensorData} objects to get an overview of recorded * Exceptions. */ public E getUngroupedExceptionOverviewQuery(ExceptionSensorData template, int limit, Date fromDate, Date toDate) { E query = getIndexQueryProvider().getIndexQuery(); query.setPlatformIdent(template.getPlatformIdent()); query.setSensorTypeIdent(template.getSensorTypeIdent()); query.setMethodIdent(template.getMethodIdent()); if (null != template.getThrowableType()) { query.addIndexingRestriction(IndexQueryRestrictionFactory.equal("throwableType", template.getThrowableType())); } ArrayList<Class<?>> searchedClasses = new ArrayList<>(); searchedClasses.add(ExceptionSensorData.class); searchedClasses.add(AggregatedExceptionSensorData.class); query.setObjectClasses(searchedClasses); query.addIndexingRestriction(IndexQueryRestrictionFactory.equal("exceptionEvent", ExceptionEvent.CREATED)); if (null != fromDate) { query.setFromDate(new Timestamp(fromDate.getTime())); } if (null != toDate) { query.setToDate(new Timestamp(toDate.getTime())); } return query; } /** * Get query for exception tree. * * @param template * Template to use. * @return Query. */ public E getExceptionTreeQuery(ExceptionSensorData template) { E query = getIndexQueryProvider().getIndexQuery(); ArrayList<Class<?>> searchedClasses = new ArrayList<>(); searchedClasses.add(ExceptionSensorData.class); searchedClasses.add(AggregatedExceptionSensorData.class); query.setObjectClasses(searchedClasses); query.setPlatformIdent(template.getPlatformIdent()); query.setMethodIdent(template.getMethodIdent()); query.addIndexingRestriction(IndexQueryRestrictionFactory.equal("throwableIdentityHashCode", template.getThrowableIdentityHashCode())); return query; } /** * Returns a query for list of objects that is used to show an overview over Exceptions with * specific information about the number of caused event types. * * @param template * The template object to be used for the query. * @param fromDate * The start date. * @param toDate * The end date. * @return A query for the list of objects with additional information about how often a * specific eventType was caused. */ public E getDataForGroupedExceptionOverviewQuery(ExceptionSensorData template, Date fromDate, Date toDate) { E query = getIndexQueryProvider().getIndexQuery(); ArrayList<Class<?>> searchedClasses = new ArrayList<>(); searchedClasses.add(ExceptionSensorData.class); searchedClasses.add(AggregatedExceptionSensorData.class); query.setObjectClasses(searchedClasses); query.setPlatformIdent(template.getPlatformIdent()); if (null != template.getThrowableType()) { query.addIndexingRestriction(IndexQueryRestrictionFactory.equal("throwableType", template.getThrowableType())); } if (null != fromDate) { query.setFromDate(new Timestamp(fromDate.getTime())); } if (null != toDate) { query.setToDate(new Timestamp(toDate.getTime())); } return query; } /** * Returns a query for a stack trace message of a throwable type. * * @param template * Template to use. * @return Query. */ public E getStackTraceMessagesForThrowableTypeQuery(ExceptionSensorData template) { E query = getIndexQueryProvider().getIndexQuery(); ArrayList<Class<?>> searchedClasses = new ArrayList<>(); searchedClasses.add(ExceptionSensorData.class); searchedClasses.add(AggregatedExceptionSensorData.class); query.setObjectClasses(searchedClasses); query.setPlatformIdent(template.getPlatformIdent()); query.addIndexingRestriction(IndexQueryRestrictionFactory.equal("throwableType", template.getThrowableType())); query.addIndexingRestriction(IndexQueryRestrictionFactory.isNotNull("stackTrace")); return query; } }