package rocks.inspectit.server.instrumentation.config.applier; import org.apache.commons.collections.CollectionUtils; import rocks.inspectit.shared.all.instrumentation.config.impl.AgentConfig; import rocks.inspectit.shared.all.instrumentation.config.impl.MethodSensorTypeConfig; import rocks.inspectit.shared.all.instrumentation.config.impl.SensorInstrumentationPoint; import rocks.inspectit.shared.cs.ci.Environment; import rocks.inspectit.shared.cs.ci.assignment.impl.TimerMethodSensorAssignment; import rocks.inspectit.shared.cs.ci.context.AbstractContextCapture; import rocks.inspectit.shared.cs.ci.sensor.method.IMethodSensorConfig; import rocks.inspectit.shared.cs.ci.sensor.method.impl.InvocationSequenceSensorConfig; import rocks.inspectit.shared.cs.cmr.service.IRegistrationService; /** * Special {@link MethodSensorInstrumentationApplier} for the timer sensor. * * @author Ivan Senic * */ public class TimerMethodSensorInstrumentationApplier extends MethodSensorInstrumentationApplier { /** * {@link TimerMethodSensorAssignment} that defines instrumentation configuration. */ private final TimerMethodSensorAssignment timerAssignment; /** * Default constructor. * * @param timerAssignment * {@link TimerMethodSensorAssignment} that defines instrumentation configuration. * @param environment * Environment belonging to the assignment. * @param registrationService * Registration service needed for registration of the IDs. */ public TimerMethodSensorInstrumentationApplier(TimerMethodSensorAssignment timerAssignment, Environment environment, IRegistrationService registrationService) { super(timerAssignment, environment, registrationService); this.timerAssignment = timerAssignment; } /** * {@inheritDoc} */ @Override protected void applyAssignment(AgentConfig agentConfiguration, SensorInstrumentationPoint registeredSensorConfig) { // call super first super.applyAssignment(agentConfiguration, registeredSensorConfig); // check for invocation starts if (timerAssignment.isStartsInvocation()) { // find the id of invocation sensor and only mark if one is found IMethodSensorConfig invocationSensorConfig = environment.getMethodSensorTypeConfig(InvocationSequenceSensorConfig.class); if (null != invocationSensorConfig) { MethodSensorTypeConfig invocationSensorTypeConfig = agentConfiguration.getMethodSensorTypeConfig(invocationSensorConfig.getClassName()); registeredSensorConfig.addSensorId(invocationSensorTypeConfig.getId(), invocationSensorTypeConfig.getPriority()); registeredSensorConfig.setStartsInvocation(true); } } // deal with context captures if (CollectionUtils.isNotEmpty(timerAssignment.getContextCaptures())) { for (AbstractContextCapture contextCapture : timerAssignment.getContextCaptures()) { registeredSensorConfig.addPropertyAccessor(contextCapture.getPropertyPathStart()); } } } }