package at.ac.tuwien.iter.modules;
import org.apache.tapestry5.ioc.OrderedConfiguration;
import org.apache.tapestry5.ioc.annotations.Contribute;
import org.slf4j.Logger;
import at.ac.tuwien.iter.services.AssertionService;
import at.ac.tuwien.iter.services.MathEngineDao;
import at.ac.tuwien.iter.services.impl.assertions.AbsoluteFailedRequestAssertion;
import at.ac.tuwien.iter.services.impl.assertions.DoodleWebServiceAvgResponseTimeAssertion;
import at.ac.tuwien.iter.services.impl.assertions.FailedRequestAssertion;
import at.ac.tuwien.iter.services.impl.assertions.InelasticityAssertion;
import at.ac.tuwien.iter.services.impl.assertions.PlasticityAssertion;
import at.ac.tuwien.iter.services.impl.assertions.RelativeFailedRequestAssertion;
import at.ac.tuwien.iter.services.impl.datacollector.DatabaseManagerService;
/**
* This module is where we conveniently collect user provided assertions to be
* run by the software.
*
* We have not placed the contributions inside the {@link AssertionModule} to
* improve the testability of the code.
*
* @author alessiogambi
*
*/
public class Assertions {
@Contribute(AssertionService.class)
public static void addAssertions(
OrderedConfiguration<AssertionService> configuration,
Logger logger, MathEngineDao dao, DatabaseManagerService dbService) {
// We do not care about order constraints for the moment
configuration.add("Plasticity", new PlasticityAssertion(logger, dao));
configuration.add("Inelasticity",
new InelasticityAssertion(logger, dao));
// Assertions over the Clients Requests ! Note that those require the
// output being a valid JMeter XML !
configuration.add("NoFailedRequests", new FailedRequestAssertion(
logger, dbService));
// Absolute Values
configuration.add("Max10RequestsFailed",
new AbsoluteFailedRequestAssertion(logger, dbService, 10));
configuration.add("Max100RequestsFailed",
new AbsoluteFailedRequestAssertion(logger, dbService, 10));
// Relative Values
configuration
.add("Max1PercRequestsFailed",
new RelativeFailedRequestAssertion(logger, dbService,
1 / 100.0));
configuration
.add("Max5PercRequestsFailed",
new RelativeFailedRequestAssertion(logger, dbService,
5 / 100.0));
configuration.add("Max10PercRequestsFailed",
new RelativeFailedRequestAssertion(logger, dbService,
10 / 100.0));
// QoS Related - thresholds can be read as well by file. TODO
// NOTE THAT THIS IS SPECIFIC OF THE APPLICATION, SO WE MUST DEAL WITH
// THIS IN A DIFFERENT WAY IN THE FUTURE
double avgCreatePollMillis = 2000.0;
double avgDeletePollMillis = 1500.0;
double avgGetAllPollsMillis = 2000.0;
double avgGetPollMillis = 500.0;
double avgVotePollMillis = 1000.0;
// THE ORDER HERE IS IMPORTATN !!!
double[] thresholds = new double[] { avgCreatePollMillis,
avgDeletePollMillis, avgGetAllPollsMillis, avgGetPollMillis,
avgVotePollMillis };
configuration.add("AvgRT",
new DoodleWebServiceAvgResponseTimeAssertion(logger, dbService,
thresholds));
}
}