package dk.thoerup.traininfoservice; import java.util.Date; import java.util.concurrent.atomic.AtomicInteger; import org.apache.commons.lang.time.DurationFormatUtils; public class Statistics { private AtomicInteger stationLookupsLocation = new AtomicInteger(0); private AtomicInteger stationLookupsName = new AtomicInteger(0); private AtomicInteger stationLookupsFavorites = new AtomicInteger(0); private AtomicInteger departureLookups = new AtomicInteger(0); private AtomicInteger timetableLookups = new AtomicInteger(0); private AtomicInteger departureCacheHits = new AtomicInteger(0); private AtomicInteger timetableCacheHits = new AtomicInteger(0); private Date lastReset = new Date(); public void incrementStationLookupsLocation() { stationLookupsLocation.incrementAndGet(); } public void incrementStationLookupsName() { stationLookupsName.incrementAndGet(); } public void incrementStationLookupsFavorites() { stationLookupsFavorites.incrementAndGet(); } public void incrementDepartureLookups() { departureLookups.incrementAndGet(); } public void incrementTimetableLookups() { timetableLookups.incrementAndGet(); } public void incrementDepartureCacheHits() { departureCacheHits.incrementAndGet(); } public void incrementTimetableCacheHits() { timetableCacheHits.incrementAndGet(); } ///////// public int getStationTotals() { return stationLookupsLocation.get() + stationLookupsName.get() + stationLookupsFavorites.get(); } public int getStationLookupsLocation() { return stationLookupsLocation.get(); } public int getStationLookupsName() { return stationLookupsName.get(); } public int getStationLookupsFavorites() { return stationLookupsFavorites.get(); } public int getDepartureLookups() { return departureLookups.get(); } public int getTimetableLookups() { return timetableLookups.get(); } public int getDepartureCacheHits() { return departureCacheHits.get(); } public int getTimetableCacheHits() { return timetableCacheHits.get(); } public Date getLastReset() { return lastReset; } /* helper functions */ public String getElapsedAsString() { Date now = new Date(); long duration = (now.getTime() - lastReset.getTime() ); return DurationFormatUtils.formatDuration(duration, "d, HH:mm:ss"); } public double getElapsedDays() { Date now = new Date(); long elapsedMs = now.getTime() - lastReset.getTime(); long elapsedHour = elapsedMs / (60*60*1000); double elapsedDay = ((double)elapsedHour) / 24.0; if (elapsedDay < 1.0) elapsedDay = 1.0; return elapsedDay; } /**** * Singleton stuff */ private static Statistics instance = null; private Statistics() { // Exists only to defeat instantiation. } public static Statistics getInstance() { if(instance == null) { instance = new Statistics(); } return instance; } }