public void shutdown() { report(); }
public void track(double timestamp, int msgCount) { long currentTimeMillis = 0; timeBucketsRWLock.readLock().lock(); try { TimeBucketMetadata timeBucket = getTimeBucket(timestamp); timeBucket.msgCount.addAndGet(msgCount); currentTimeMillis = System.currentTimeMillis(); timeBucket.lastMessageTimestampSeenInSec = timestamp; double latency = currentTimeMillis - (timestamp * 1000); for (int i = 0; i < msgCount; i++) { timeBucket.latencyStats.addValue(latency); } } finally { timeBucketsRWLock.readLock().unlock(); } if (timeBucketCount.get() >= reportFreqBucketCount || currentTimeMillis > nextReportTime.get()) { report(); } }
@Test public void testTrackReport() throws Exception { messageTracker.track(testTimestampInSec); ConcurrentMap<Double, TimeBucketMetadata> buckets = messageTracker.getTimeBucketsMap(); assertEquals(1, buckets.get(messageTracker.getBucketMapping(testTimestampInSec)).msgCount.get()); messageTracker.report(); buckets = messageTracker.getTimeBucketsMap(); assertEquals(0, buckets.size()); }
@Test public void testTrackMultipleBuckets() throws Exception { int totalMessages = 10; for (int i = 0; i < totalMessages; i++) { messageTracker.track(testTimestampInSec + 60000 * i); } // 10 time-buckets seen so far. ConcurrentMap<Double, TimeBucketMetadata> buckets = messageTracker.getTimeBucketsMap(); assertEquals(totalMessages, buckets.size()); messageTracker.report(); // All were cleared buckets = messageTracker.getTimeBucketsMap(); assertEquals(0, buckets.size()); }