package com.kendelong.util.performance; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; public class PerformanceMonitor { private AtomicInteger numberOfAccesses = new AtomicInteger(); private AtomicInteger numberOfSuccesses = new AtomicInteger(); private AtomicInteger numberOfExceptions = new AtomicInteger(); private AtomicLong sumOfAllSuccesses = new AtomicLong(); private AtomicLong maximum = new AtomicLong(); private AtomicLong minimum = new AtomicLong(Long.MAX_VALUE); private AtomicLong startTime = new AtomicLong(); public PerformanceMonitor() { long startTimeMillis = getTime(); startTime.set(startTimeMillis); } protected PerformanceMonitor(long startTimeMillis) { startTime.set(startTimeMillis); } protected long getTime() { return System.currentTimeMillis(); } public int getNumberOfAccesses() { return numberOfAccesses.get(); } public void addTiming(long val) { numberOfAccesses.incrementAndGet(); numberOfSuccesses.incrementAndGet(); sumOfAllSuccesses.addAndGet(val); if(val > maximum.get()) maximum.set(val); if(val < minimum.get()) minimum.set(val); } public void addException() { numberOfAccesses.incrementAndGet(); numberOfExceptions.incrementAndGet(); } public double getAverageResponseTime() { int successes = numberOfSuccesses.get(); if(successes == 0) return 0; return 1.0*sumOfAllSuccesses.get()/successes; } public double getMaximumResponseTime() { return maximum.get(); } public double getMinimumResponseTime() { long time = minimum.get(); if(time == Long.MAX_VALUE) time = 0; return time; } public double getAccessesPerSecond() { long now = getTime(); long delta = now - startTime.get(); if(delta == 0) return 0; return 1000.0*getNumberOfAccesses()/delta; } public double getAccessesPerMinute() { return getAccessesPerSecond()*60.0; } public double getAccessesPerHour() { return getAccessesPerMinute()*60.0; } public int getNumberOfExceptions() { return numberOfExceptions.get(); } public double getCumulativeTime() { return getAverageResponseTime()*getNumberOfAccesses(); } }