/** * Returns the {@link StatMonitorHandler}. If one does not currently exist it will be created. * * @return the StatMonitorHandler for adding monitors * @throws IllegalStateException if no SampleCollector has been created and initialized yet */ static StatMonitorHandler getStatMonitorHandler() { // sync SampleCollector.class and then instance.sampleHandlers synchronized (SampleCollector.class) { if (instance == null) { throw new IllegalStateException("Statistics sampler is not available"); } synchronized (instance.sampleHandlers) { StatMonitorHandler handler = instance.statMonitorHandler; if (handler == null) { handler = new StatMonitorHandler(); instance.addSampleHandler(handler); instance.statMonitorHandler = handler; } return handler; } } }
@Test public void testNotificationSampleTimeMillis() throws Exception { final long currentTime = System.currentTimeMillis(); StatMonitorHandler handler = new StatMonitorHandler(); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); handler.addMonitor(monitor); long nanoTimeStamp = NanoTimer.getTime(); handler.sampled(nanoTimeStamp, Collections.<ResourceInstance>emptyList()); waitForNotificationCount(monitor, 1, 2 * 1000, 10, false); assertTrue(monitor.getTimeStamp() != nanoTimeStamp); assertTrue(monitor.getTimeStamp() >= currentTime); }
@Test public void testNotificationSampleFrequencyDefault() throws Exception { final int sampleFrequency = 1; StatMonitorHandler handler = new StatMonitorHandler(); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); handler.addMonitor(monitor); final int sampleCount = 100; for (int i = 0; i < sampleCount; i++) { handler.sampled(NanoTimer.getTime(), Collections.<ResourceInstance>emptyList()); waitForNotificationCount(monitor, 1 + i, 2 * 1000, 10, false); } assertEquals(sampleCount / sampleFrequency, monitor.getNotificationCount()); }
@Test public void testStatMonitorNotifierAliveButWaiting() throws Exception { StatMonitorHandler handler = new StatMonitorHandler(); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); handler.addMonitor(monitor); final StatMonitorNotifier notifier = handler.getStatMonitorNotifier(); assertTrue(notifier.isAlive()); waitUntilWaiting(notifier); for (int i = 0; i < 20; i++) { assertTrue(notifier.isWaiting()); Thread.sleep(10); } }
@Test public void testNotificationResourceInstances() throws Exception { final int resourceInstanceCount = 100; final List<ResourceInstance> resourceInstances = new ArrayList<ResourceInstance>(); for (int i = 0; i < resourceInstanceCount; i++) { resourceInstances.add(new ResourceInstance(i, null, null)); } StatMonitorHandler handler = new StatMonitorHandler(); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); handler.addMonitor(monitor); handler.sampled(NanoTimer.getTime(), Collections.unmodifiableList(resourceInstances)); waitForNotificationCount(monitor, 1, 2 * 1000, 10, false); final List<ResourceInstance> notificationResourceInstances = monitor.getResourceInstances(); assertNotNull(notificationResourceInstances); assertEquals(resourceInstances, notificationResourceInstances); assertEquals(resourceInstanceCount, notificationResourceInstances.size()); int i = 0; for (ResourceInstance resourceInstance : notificationResourceInstances) { assertEquals(i, resourceInstance.getId()); i++; } }
@Test public void testStatMonitorNotifierWakesUpForWork() throws Exception { StatMonitorHandler handler = new StatMonitorHandler(); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); handler.addMonitor(monitor); final StatMonitorNotifier notifier = handler.getStatMonitorNotifier(); assertTrue(notifier.isAlive()); waitUntilWaiting(notifier); // if notification occurs then notifier woke up... assertEquals(0, monitor.getNotificationCount()); handler.sampled(NanoTimer.getTime(), Collections.<ResourceInstance>emptyList()); waitForNotificationCount(monitor, 1, 2 * 1000, 10, false); assertEquals(1, monitor.getNotificationCount()); // and goes back to waiting... waitUntilWaiting(notifier); }
@Test public void testAddNewMonitor() throws Exception { StatMonitorHandler handler = new StatMonitorHandler(); assertTrue(handler.getMonitorsSnapshot().isEmpty()); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); assertTrue(handler.addMonitor(monitor)); assertFalse(handler.getMonitorsSnapshot().isEmpty()); assertTrue(handler.getMonitorsSnapshot().contains(monitor)); handler.sampled(NanoTimer.getTime(), Collections.<ResourceInstance>emptyList()); waitForNotificationCount(monitor, 1, 2 * 1000, 10, false); assertEquals(1, monitor.getNotificationCount()); }
@Test public void testRemoveMissingMonitorReturnsFalse() throws Exception { StatMonitorHandler handler = new StatMonitorHandler(); assertTrue(handler.getMonitorsSnapshot().isEmpty()); StatisticsMonitor monitor = new TestStatisticsMonitor(); assertFalse(handler.getMonitorsSnapshot().contains(monitor)); assertFalse(handler.removeMonitor(monitor)); assertTrue(handler.getMonitorsSnapshot().isEmpty()); }
@Test public void testAddExistingMonitorReturnsFalse() throws Exception { StatMonitorHandler handler = new StatMonitorHandler(); assertTrue(handler.getMonitorsSnapshot().isEmpty()); StatisticsMonitor monitor = new TestStatisticsMonitor(); assertTrue(handler.addMonitor(monitor)); assertFalse(handler.getMonitorsSnapshot().isEmpty()); assertTrue(handler.getMonitorsSnapshot().contains(monitor)); assertFalse(handler.addMonitor(monitor)); }
@Test public void testRemoveExistingMonitor() throws Exception { StatMonitorHandler handler = new StatMonitorHandler(); assertTrue(handler.getMonitorsSnapshot().isEmpty()); TestStatisticsMonitor monitor = new TestStatisticsMonitor(); assertTrue(handler.addMonitor(monitor)); assertFalse(handler.getMonitorsSnapshot().isEmpty()); assertTrue(handler.getMonitorsSnapshot().contains(monitor)); assertTrue(handler.removeMonitor(monitor)); assertFalse(handler.getMonitorsSnapshot().contains(monitor)); assertTrue(handler.getMonitorsSnapshot().isEmpty()); handler.sampled(NanoTimer.getTime(), Collections.<ResourceInstance>emptyList()); assertEquals(0, monitor.getNotificationCount()); }