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; } }