package com.griddynamics.jagger.engine.e1.collector.testgroup;
import com.griddynamics.jagger.util.Decision;
import com.griddynamics.jagger.engine.e1.sessioncomparation.WorstCaseDecisionMaker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
/** Listener, executed after test-group execution.
* @author Novozhilov Mark
* @n
* @par Details:
* @details This type of listener is intended to make decision about test group execution status @n
* It is executed when decision making based on limits is used. Details: @ref MainDecisionMaker @n
* @n
* @ingroup Main_Listeners_group */
public interface TestGroupDecisionMakerListener {
/** Executes after test-group measured parameters are aggregated in the database, @n
* intended metrics are compared to limits, decisions for all tests in test group are taken. @n
* @param decisionMakerInfo - describes test-group, decisions for all tests in test groups, @n
* limits and decisions for all metrics in tests
* @return decision @ref com.griddynamics.jagger.util.Decision "Decision" for this test group, based on input info
*/
Decision onDecisionMaking(TestGroupDecisionMakerInfo decisionMakerInfo);
/** Class is used by Jagger for sequential execution of several listeners @n
* Not required for custom test-group decision maker listeners */
public static class Composer implements TestGroupDecisionMakerListener{
private static Logger log = LoggerFactory.getLogger(Composer.class);
private List<TestGroupDecisionMakerListener> listenerList;
private Composer(List<TestGroupDecisionMakerListener> listenerList){
this.listenerList = listenerList;
}
@Override
public Decision onDecisionMaking(TestGroupDecisionMakerInfo decisionMakerInfo) {
List<Decision> decisions = new ArrayList<Decision>();
WorstCaseDecisionMaker worstCaseDecisionMaker = new WorstCaseDecisionMaker();
for (TestGroupDecisionMakerListener listener : listenerList){
try{
decisions.add(listener.onDecisionMaking(decisionMakerInfo));
}catch (RuntimeException ex){
log.error("Failed to call on decision making in {} test-group-decision-maker-listener", listener.toString(), ex);
}
}
return worstCaseDecisionMaker.getDecision(decisions);
}
public static TestGroupDecisionMakerListener compose(List<TestGroupDecisionMakerListener> listeners){
return new Composer(listeners);
}
}
}