package org.spotter.ext.detection.excessiveMessaging; import java.util.HashSet; import java.util.Set; import org.lpe.common.config.ConfigParameterDescription; import org.lpe.common.util.LpeSupportedTypes; import org.spotter.core.detection.AbstractDetectionExtension; import org.spotter.core.detection.IDetectionController; public class ExcessiveMessagingExtension extends AbstractDetectionExtension { public static final String REQUIRED_CONFIDENCE_LEVEL_KEY = "confidenceLevel"; public static final String REQUIRED_SIGNIFICANT_STEPS_KEY = "numSignificantSteps"; protected static final String DETECTION_STRATEGY_KEY = "strategy"; protected static final String THRESHOLD_STRATEGY = "fix threshold strategy"; protected static final String STAGNATION_STRATEGY = "network stagnation strategy"; protected static final String MSG_THORUGHPUT_STAGNATION_STRATEGY = "message throughput stagnation strategy"; public static final double REQUIRED_CONFIDENCE_LEVEL_DEFAULT = 0.95; public static final int REQUIRED_SIGNIFICANT_STEPS_DEFAULT = 2; @Override public IDetectionController createExtensionArtifact() { return new ExcessiveMessagingDetectionController(this); } @Override public String getName() { return "Excessive Messaging"; } private ConfigParameterDescription createNumSignificantStepsParameter() { ConfigParameterDescription numSignificantStepsParameter = new ConfigParameterDescription( REQUIRED_SIGNIFICANT_STEPS_KEY, LpeSupportedTypes.Integer); numSignificantStepsParameter.setDefaultValue(String.valueOf(REQUIRED_SIGNIFICANT_STEPS_DEFAULT)); numSignificantStepsParameter.setRange(String.valueOf(1), String.valueOf(Integer.MAX_VALUE)); numSignificantStepsParameter.setDescription("This parameter specifies the number of steps between experiments " + "required to show a significant increase in order to detect a One Lane Bridge."); return numSignificantStepsParameter; } private ConfigParameterDescription createConfidenceLevelParameter() { ConfigParameterDescription requiredConfidenceLevel = new ConfigParameterDescription( REQUIRED_CONFIDENCE_LEVEL_KEY, LpeSupportedTypes.Double); requiredConfidenceLevel.setDefaultValue(String.valueOf(REQUIRED_CONFIDENCE_LEVEL_DEFAULT)); requiredConfidenceLevel.setRange("0.0", "1.0"); requiredConfidenceLevel.setDescription("This parameter defines the confidence level to be reached " + "in order to recognize a significant difference when comparing " + "two response time samples with the t-test."); return requiredConfidenceLevel; } private ConfigParameterDescription createStrategyParameter() { ConfigParameterDescription scopeParameter = new ConfigParameterDescription(DETECTION_STRATEGY_KEY, LpeSupportedTypes.String); Set<String> scopeOptions = new HashSet<>(); scopeOptions.add(STAGNATION_STRATEGY); scopeOptions.add(THRESHOLD_STRATEGY); scopeOptions.add(MSG_THORUGHPUT_STAGNATION_STRATEGY); scopeParameter.setOptions(scopeOptions); scopeParameter.setDefaultValue(STAGNATION_STRATEGY); scopeParameter.setDescription("This parameter determines the strategy, " + "used to analyse the Database congestion anti-pattern."); return scopeParameter; } @Override protected void initializeConfigurationParameters() { addConfigParameter(createConfidenceLevelParameter()); addConfigParameter(createNumSignificantStepsParameter()); addConfigParameter(createStrategyParameter()); } }