package com.griddynamics.jagger.util.generators;
import static com.griddynamics.jagger.util.StandardMetricsNamesUtil.SUCCESS_RATE;
import static com.griddynamics.jagger.util.StandardMetricsNamesUtil.SUCCESS_RATE_ID;
import com.griddynamics.jagger.engine.e1.collector.DurationCollector;
import com.griddynamics.jagger.engine.e1.collector.InformationCollector;
import com.griddynamics.jagger.engine.e1.collector.MetricDescription;
import com.griddynamics.jagger.engine.e1.collector.ResponseValidatorProvider;
import com.griddynamics.jagger.engine.e1.collector.SuccessRateAggregatorProvider;
import com.griddynamics.jagger.engine.e1.collector.SuccessRateCollectorProvider;
import com.griddynamics.jagger.engine.e1.collector.SuccessRateFailsAggregatorProvider;
import com.griddynamics.jagger.engine.e1.collector.ValidatorProvider;
import com.griddynamics.jagger.engine.e1.scenario.ReflectionProvider;
import com.griddynamics.jagger.engine.e1.scenario.WorkloadTask;
import com.griddynamics.jagger.invoker.CircularExclusiveAccessLoadBalancer;
import com.griddynamics.jagger.invoker.QueryPoolLoadBalancer;
import com.griddynamics.jagger.invoker.QueryPoolScenarioFactory;
import com.griddynamics.jagger.user.test.configurations.JTestDefinition;
import org.springframework.beans.factory.support.ManagedList;
import java.util.List;
/**
*
* @author asokol
* created 11/6/16
* Generate {@link WorkloadTask} entity from user-defined {@link JTestDefinition} entity.
*/
class TestDefinitionGenerator {
public static WorkloadTask generatePrototype(JTestDefinition jTestDefinition,
ConfigurationProperties configurationProperties) {
WorkloadTask prototype = new WorkloadTask();
prototype.setDescription(jTestDefinition.getDescription());
QueryPoolScenarioFactory scenarioFactory = new QueryPoolScenarioFactory();
scenarioFactory.setQueryProvider(jTestDefinition.getQueries());
scenarioFactory.setEndpointProvider(jTestDefinition.getEndpoints());
QueryPoolLoadBalancer loadBalancer = jTestDefinition.getLoadBalancer();
if (loadBalancer instanceof CircularExclusiveAccessLoadBalancer) {
((CircularExclusiveAccessLoadBalancer) loadBalancer).setPollTimeout(configurationProperties.getLoadBalancerPollTimeout());
}
scenarioFactory.setLoadBalancer(loadBalancer);
scenarioFactory.setInvokerProvider(jTestDefinition.getInvoker());
prototype.setScenarioFactory(scenarioFactory);
prototype.setName(jTestDefinition.getId());
ManagedList collectors = new ManagedList();
collectors.add(getSuccessRateMetric());
collectors.add(ReflectionProvider.ofClass(DurationCollector.class));
collectors.add(ReflectionProvider.ofClass(InformationCollector.class));
prototype.setCollectors(collectors);
ManagedList validators = new ManagedList();
for (ResponseValidatorProvider responseValidatorProvider: jTestDefinition.getValidators()) {
ValidatorProvider validatorProvider = new ValidatorProvider();
validatorProvider.setValidator(responseValidatorProvider);
validators.add(validatorProvider);
}
prototype.setValidators(validators);
prototype.setListeners((List) jTestDefinition.getListeners());
return prototype;
}
private static SuccessRateCollectorProvider getSuccessRateMetric() {
MetricDescription metricDescriptions = new MetricDescription(SUCCESS_RATE_ID)
.displayName(SUCCESS_RATE)
.plotData(true)
.showSummary(true)
.addAggregator(new SuccessRateAggregatorProvider())
.addAggregator(new SuccessRateFailsAggregatorProvider());
SuccessRateCollectorProvider successRateCollectorProvider = new SuccessRateCollectorProvider();
successRateCollectorProvider.setMetricDescription(metricDescriptions);
successRateCollectorProvider.setName(SUCCESS_RATE_ID);
return successRateCollectorProvider;
}
}