package rocks.inspectit.server.processor.impl; import javax.persistence.EntityManager; import org.springframework.beans.factory.annotation.Autowired; import rocks.inspectit.server.cache.IBuffer; import rocks.inspectit.server.cache.impl.BufferElement; import rocks.inspectit.server.processor.AbstractCmrDataProcessor; import rocks.inspectit.shared.all.communication.DefaultData; import rocks.inspectit.shared.all.communication.MethodSensorData; import rocks.inspectit.shared.all.communication.data.InvocationAwareData; import rocks.inspectit.shared.all.communication.data.InvocationSequenceData; /** * Buffer inserter data processor. Inserts only {@link MethodSensorData} data objects that are not * part of an invocation. * * @author Ivan Senic * */ public class BufferInserterCmrProcessor extends AbstractCmrDataProcessor { /** * Buffer to inser elements to. */ @Autowired IBuffer<MethodSensorData> buffer; /** * {@inheritDoc} */ @Override protected void processData(DefaultData defaultData, EntityManager entityManager) { buffer.put(new BufferElement<>((MethodSensorData) defaultData)); } /** * {@inheritDoc} */ @Override public boolean canBeProcessed(DefaultData defaultData) { if (null == defaultData) { return false; } else if (!(defaultData instanceof MethodSensorData)) { // we only put to buffer method sensor data return false; } else if (defaultData instanceof InvocationAwareData) { // we don't put to buffer elements that are inside of invocation if (!((InvocationAwareData) defaultData).isOnlyFoundOutsideInvocations()) { return false; } } else if (defaultData instanceof InvocationSequenceData) { // we don't put to buffer invocations that are not root if (((InvocationSequenceData) defaultData).getParentSequence() != null) { return false; } } return true; } }