package com.testProject.metrics;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
import org.apache.log4j.Logger;
import org.databene.contiperf.PerfTest;
import org.databene.contiperf.junit.ContiPerfRule;
import org.databene.contiperf.timer.RandomTimer;
import org.junit.After;
import org.junit.Rule;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import static org.junit.Assert.assertNotNull;
public class MetricsThreadSafetyTest {
private static final Logger LOGGER = Logger.getLogger(MetricsThreadSafetyTest.class);
private Map<String, Timer.Context> timerContextMap = new HashMap<String, Timer.Context>();
@Rule
public ContiPerfRule i = new ContiPerfRule();
@Autowired
final MetricRegistry metrics = new MetricRegistry();
@Test
@PerfTest(duration = 200, threads = 2, timer = RandomTimer.class, timerParams = { 30, 80 }, rampUp = 50, warmUp = 50)
public void shouldCreateIdenticalTimers() {
String timerName = startTimer(MetricsThreadSafetyTest.class, "timer");
try {
Thread.sleep(100);
LOGGER.info("[MetricsThreadSafetyTest] running " + timerName);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
stopTimer(timerName);
LOGGER.debug("[MetricsThreadSafetyTest] timer stopped");
}
assertNotNull(metrics.getTimers());
}
public String startTimer(Class<?> clazz, String... names) {
String timerName = MetricRegistry.name(clazz, names);
Timer timer = metrics.timer(timerName);
Timer.Context timerContext = timer.time();
LOGGER.info("[MetricsThreadSafetyTest] starting " + timerName + " at: " + System.nanoTime());
timerContextMap.put(timerName, timerContext);
return timerName;
}
public void stopTimer(final String name) {
Timer.Context timerContext = timerContextMap.get(name);
if (timerContext != null) {
LOGGER.info("[MetricsThreadSafetyTest] stopping " + name + " at: " + System.nanoTime());
long time = timerContext.stop();
LOGGER.info("[MetricsThreadSafetyTest] time: " + time);
}
}
}
com.testProject.metrics.MetricsThreadSafetyTest.shouldCreateIdenticalTimers
2015-03-09 16:48:22,131 [Thread-0] INFO com.testProject.metrics.MetricsThreadSafetyTest - [MetricsThreadSafetyTest] starting com.testProject.metrics.MetricsThreadSafetyTest.timer at: 27564875089318
2015-03-09 16:48:22,158 [Thread-1] INFO com.testProject.metrics.MetricsThreadSafetyTest - [MetricsThreadSafetyTest] starting com.testProject.metrics.MetricsThreadSafetyTest.timer at: 27564902541610
2015-03-09 16:48:22,231 [Thread-0] INFO com.testProject.metrics.MetricsThreadSafetyTest - [MetricsThreadSafetyTest] running com.testProject.metrics.MetricsThreadSafetyTest.timer
2015-03-09 16:48:22,233 [Thread-0] INFO com.testProject.metrics.MetricsThreadSafetyTest - [MetricsThreadSafetyTest] stopping com.testProject.metrics.MetricsThreadSafetyTest.timer at: 27564977332227
2015-03-09 16:48:22,234 [Thread-0] INFO com.testProject.metrics.MetricsThreadSafetyTest - [MetricsThreadSafetyTest] time: 75131035
2015-03-09 16:48:22,258 [Thread-1] INFO com.testProject.metrics.MetricsThreadSafetyTest - [MetricsThreadSafetyTest] running com.testProject.metrics.MetricsThreadSafetyTest.timer
2015-03-09 16:48:22,258 [Thread-1] INFO com.testProject.metrics.MetricsThreadSafetyTest - [MetricsThreadSafetyTest] stopping com.testProject.metrics.MetricsThreadSafetyTest.timer at: 27565002600543
2015-03-09 16:48:22,258 [Thread-1] INFO com.testProject.metrics.MetricsThreadSafetyTest - [MetricsThreadSafetyTest] time: 100391225