package org.anotheria.moskitodemo.accumulator; import net.anotheria.moskito.core.predefined.ServiceStats; import net.anotheria.moskito.core.producers.IStats; import net.anotheria.moskito.core.producers.IStatsProducer; import net.anotheria.moskito.core.registry.ProducerRegistryFactory; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.atomic.AtomicInteger; public class RandomProducer implements IStatsProducer { private int limitReq; private int limitTime; private static AtomicInteger instanceCounter = new AtomicInteger(0); private int instanceId = instanceCounter.incrementAndGet(); private Random rnd; private ArrayList<IStats> stats; private ServiceStats serviceStats; private static final Timer timer = new Timer("RandomProducers", true); public RandomProducer(int aLimitReq, int aLimitTime){ limitReq = aLimitReq; limitTime = aLimitTime; rnd = new Random(System.nanoTime()); serviceStats = new ServiceStats("cumulated"); stats = new ArrayList<IStats>(); stats.add(serviceStats); ProducerRegistryFactory.getProducerRegistryInstance().registerProducer(this); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { generateTraffic(); } }, 0L, 1000L*60); } public void generateTraffic(){ int numberOfReq = rnd.nextInt(limitReq); for (int i=0; i<numberOfReq; i++){ int duration = rnd.nextInt(limitTime); serviceStats.addExecutionTime(1000L*1000*duration); serviceStats.addRequest(); serviceStats.notifyRequestFinished(); } } @Override public List<IStats> getStats() { return stats; } @Override public String getProducerId() { return "Random"+instanceId; } @Override public String getCategory() { return "service"; } @Override public String getSubsystem() { return "accumulator-random"; } }