package org.spotter.ext.detection.blob; import java.util.List; import org.aim.api.exceptions.InstrumentationException; import org.aim.api.exceptions.MeasurementException; import org.aim.api.measurement.dataset.DatasetCollection; import org.aim.artifacts.probes.JmsCommunicationProbe; import org.aim.artifacts.scopes.JmsScope; import org.aim.description.InstrumentationDescription; import org.aim.description.builder.InstrumentationDescriptionBuilder; import org.lpe.common.extension.IExtension; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spotter.core.ProgressManager; import org.spotter.core.detection.AbstractDetectionController; import org.spotter.core.detection.IDetectionController; import org.spotter.exceptions.WorkloadException; import org.spotter.shared.result.model.SpotterResult; public class BlobDetectionController extends AbstractDetectionController { private static final Logger LOGGER = LoggerFactory.getLogger(BlobDetectionController.class); private String analysisStrategy; private IBlobAnalyzer analysisStrategyImpl; public BlobDetectionController(IExtension<IDetectionController> provider) { super(provider); } @Override public void loadProperties() { analysisStrategy = getProblemDetectionConfiguration().getProperty(BlobExtension.DETECTION_STRATEGY_KEY, BlobExtension.COMP_EXCLUSION_STRATEGY); switch (analysisStrategy) { case BlobExtension.COMP_EXCLUSION_STRATEGY: analysisStrategyImpl = new ComponentExclusionAnalyzer(); break; case BlobExtension.MEAN_ANALYSIS_STRATEGY: analysisStrategyImpl = new MeanAnalyzer(); break; default: analysisStrategyImpl = new ComponentExclusionAnalyzer(); } } @Override public long getExperimentSeriesDuration() { return ProgressManager.getInstance().calculateDefaultExperimentSeriesDuration(1); } @Override public void executeExperiments() throws InstrumentationException, MeasurementException, WorkloadException { executeDefaultExperimentSeries(this, 1, getInstrumentationDescription()); } private InstrumentationDescription getInstrumentationDescription() throws InstrumentationException { InstrumentationDescriptionBuilder idBuilder = new InstrumentationDescriptionBuilder(); return idBuilder.newAPIScopeEntity(JmsScope.class.getName()).addProbe(JmsCommunicationProbe.MODEL_PROBE) .entityDone().build(); } @Override protected SpotterResult analyze(DatasetCollection data) { LOGGER.debug("Analyze data for GodClass Antipattern.."); SpotterResult result = new SpotterResult(); result.setDetected(false); /** Process the raw measurement data */ LOGGER.debug("process data.."); ProcessedData processData = DataProcessor.processData(data); /** Analyze the processed data */ LOGGER.debug("analyze data.."); List<Component> blobs = analysisStrategyImpl.analyze(processData, getResultManager(), result); if (!blobs.isEmpty()) { result.setDetected(true); int i = 1; for (Component blob : blobs) { result.addMessage("Blob Component:"); result.addMessage("CP " + i + ": " + blob.getId()); result.addMessage(""); result.addMessage(""); result.addMessage(""); i++; } } return result; } }