package rocks.inspectit.agent.java.sensor.platform;
import org.slf4j.Logger;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import rocks.inspectit.agent.java.config.IConfigurationStorage;
import rocks.inspectit.agent.java.core.IPlatformManager;
import rocks.inspectit.shared.all.communication.SystemSensorData;
import rocks.inspectit.shared.all.instrumentation.config.impl.PlatformSensorTypeConfig;
import rocks.inspectit.shared.all.spring.logger.Log;
/**
* Abstract class for all {@link IPlatformSensor}s to properly initialize after Spring has set all
* the properties.
*
* @author Ivan Senic
* @author Max Wassiljew (NovaTec Consulting GmbH)
*/
public abstract class AbstractPlatformSensor implements IPlatformSensor, InitializingBean {
/**
* The logger of the class.
*/
@Log
Logger log;
/**
* Configuration storage for initializing the sensor and registering with the config.
*/
@Autowired
private IConfigurationStorage configurationStorage;
/**
* Sensor type configuration used.
*/
private PlatformSensorTypeConfig sensorTypeConfig;
/**
* The Platform manager used to get the correct IDs.
*/
@Autowired
private IPlatformManager platformManager;
/**
* Get the corresponding {@link SystemSensorData} of the {@link IPlatformSensor}. Each sensor
* has its own data collector where collected data is put and on the first run each data
* collector has to be initialized. Therefore the method is used to get specific data collector
* of each sensor for the initialization.
*
* @return the corresponding {@link PlatformSensorData}.
*
* @see {@link AbstractPlatformSensor#initSensorData()} for sensor data initialization.
*/
protected abstract SystemSensorData getSystemSensorData();
/**
* {@inheritDoc}
*/
@Override
public void afterPropertiesSet() throws Exception {
for (PlatformSensorTypeConfig config : configurationStorage.getPlatformSensorTypes()) {
if (config.getClassName().equals(this.getClass().getName())) {
this.init(config);
break;
}
}
}
/**
* Initializes the {@link IPlatformSensor}.
*
* @param sensorTypeConfig
* initialization configuration.
*/
private void init(PlatformSensorTypeConfig sensorTypeConfig) {
this.sensorTypeConfig = sensorTypeConfig;
this.initSensorData();
}
/**
* Initializes the {@link SystemSensorData}.
*/
private void initSensorData() {
SystemSensorData systemSensorData = this.getSystemSensorData();
systemSensorData.setPlatformIdent(this.platformManager.getPlatformId());
systemSensorData.setSensorTypeIdent(sensorTypeConfig.getId());
}
/**
* {@inheritDoc}
*/
@Override
public PlatformSensorTypeConfig getSensorTypeConfig() {
return sensorTypeConfig;
}
}