All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.anotheria.moskito.extensions.sampling.SamplingEngine Maven / Gradle / Ivy

The newest version!
package net.anotheria.moskito.extensions.sampling;

import net.anotheria.moskito.core.dynamic.OnDemandStatsProducer;
import net.anotheria.moskito.core.dynamic.OnDemandStatsProducerException;
import net.anotheria.moskito.core.producers.IStats;
import net.anotheria.moskito.core.registry.IProducerRegistry;
import net.anotheria.moskito.core.registry.ProducerRegistryFactory;
import net.anotheria.moskito.extensions.sampling.mappers.ServiceRequestStatsMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * TODO comment this class
 *
 * @author lrosenberg
 * @since 24.04.15 18:00
 */
public class SamplingEngine {

	/**
	 * Logger.
	 */
	private static final Logger log = LoggerFactory.getLogger(SamplingEngine.class);

	/**
	 * Instance. For now.
	 */
	private static final SamplingEngine instance = new SamplingEngine();

	private final IProducerRegistry producerRegistry;

	public static final Boolean FLAG_REGISTER_PRODUCER_ON_THE_FLY = Boolean.TRUE;

	private SamplingEngine(){
		producerRegistry = ProducerRegistryFactory.getProducerRegistryInstance();
	}



	public static final SamplingEngine getInstance(){
		return instance;
	}

	public void addSample(Sample sample){
		//do queue later

		processSample(sample);

	}

	private void processSample(Sample sample){
		String producerId = sample.getProducerId();
		String mapperId   = sample.getStatMapperId();
		StatsMapper mapper = getMapper(mapperId);

		if (mapper == null){
			log.error("Mapper with id "+mapperId+" not found, thrown away sample "+sample);
			return;
		}

		OnDemandStatsProducer producer = (OnDemandStatsProducer)producerRegistry.getProducer(producerId);
		if (producer == null){
			//we have to register producer.
			if (!FLAG_REGISTER_PRODUCER_ON_THE_FLY){
				log.warn("Submitted new sample for "+producerId+", which is not registered and producer auto-register is off");
				return ;
			}
			log.info("Registering producer "+producerId+" on the fly");
			String category = sample.getValues().get("category");
			if (category == null)
				category = "sampling"; // TODO make configurable
			String subsystem = sample.getValues().get("subsystem");
			if (subsystem == null)
				subsystem = "sampling"; // TODO make configurable
			producer = new OnDemandStatsProducer(producerId, category, subsystem, mapper.getFactory());
			producerRegistry.registerProducer(producer);
		}

		log.debug("Have to add sampling value to producer "+producer);
		String statName = sample.getValues().get("stat");
		IStats defaultStats = producer.getDefaultStats();
		mapper.updateStats(defaultStats, sample);

		try {
			IStats stats = producer.getStats(statName);
			mapper.updateStats(stats, sample);
		}catch(OnDemandStatsProducerException e){
			log.warn("Can't create new stats object", e);
		}
	}

	private StatsMapper getMapper(String mapperId){
		//TODO configuration.
		if (mapperId.equals("servicerequest"))
			return new ServiceRequestStatsMapper();
		return null;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy