/** * {@inheritDoc} */ public List<Metric> call() { return poller.poll(filter, reset); } }
/** * {@inheritDoc} */ @Override public void run() { try { List<Metric> metrics = poller.poll(filter, reset); for (MetricObserver o : observers) { try { o.update(metrics); } catch (Throwable t) { LOGGER.warn("failed to send metrics to " + o.getName(), t); } } } catch (Throwable t) { LOGGER.warn("failed to poll metrics", t); } } }
@Test public void testLongestPrefixFilter() throws Exception { NavigableMap<String, MetricFilter> filters = new TreeMap<>(); filters.put("a.b.c", MATCH_ALL); filters.put("a.b.c.c", MATCH_NONE); MetricFilter filter = new PrefixMetricFilter("c", MATCH_NONE, filters); MetricPoller poller = newPoller(); List<Metric> metrics = poller.poll(filter); assertEquals(metrics.size(), 2); }
@Test public void testFilterFalse() throws Exception { MetricPoller poller = newPoller(); assertEquals(poller.poll(new BasicMetricFilter(false)).size(), 0); }
@Test public void testPrefixFilter() throws Exception { NavigableMap<String, MetricFilter> filters = new TreeMap<>(); filters.put("a.b.c", MATCH_ALL); MetricFilter filter = new PrefixMetricFilter("c", MATCH_NONE, filters); MetricPoller poller = newPoller(); List<Metric> metrics = poller.poll(filter); assertEquals(metrics.size(), 3); }
@Test public void testPrefixFilterOnName() throws Exception { NavigableMap<String, MetricFilter> filters = new TreeMap<>(); filters.put("m", MATCH_ALL); MetricFilter filter = new PrefixMetricFilter(null, MATCH_NONE, filters); MetricPoller poller = newPoller(); List<Metric> metrics = poller.poll(filter); assertEquals(metrics.size(), 5); } }
@Test public void testPrefixFilter() throws Exception { Pattern pattern = Pattern.compile("^a\\.b\\.c.*"); MetricFilter filter = new RegexMetricFilter("c", pattern, false, false); MetricPoller poller = newPoller(); List<Metric> metrics = poller.poll(filter); assertEquals(metrics.size(), 3); assertEquals(metrics.get(0), mkList().get(1)); }
@Test public void testPrefixFilterMatchIfTagMissing() throws Exception { Pattern pattern = Pattern.compile("^a\\.b\\.c.*"); MetricFilter filter = new RegexMetricFilter("c", pattern, true, false); MetricPoller poller = newPoller(); List<Metric> metrics = poller.poll(filter); assertEquals(metrics.size(), 4); assertEquals(metrics.get(0), mkList().get(0)); }
@Test public void testPrefixFilterInvert() throws Exception { Pattern pattern = Pattern.compile("^a\\.b\\.c.*"); MetricFilter filter = new RegexMetricFilter("c", pattern, true, true); MetricPoller poller = newPoller(); List<Metric> metrics = poller.poll(filter); assertEquals(metrics.size(), 1); assertEquals(metrics.get(0), mkList().get(4)); }
@Test public void testPrefixFilterName() throws Exception { Pattern pattern = Pattern.compile("m[13]"); MetricFilter filter = new RegexMetricFilter(null, pattern, false, false); MetricPoller poller = newPoller(); List<Metric> metrics = poller.poll(filter); assertEquals(metrics.size(), 2); assertEquals(metrics.get(0), mkList().get(0)); assertEquals(metrics.get(1), mkList().get(2)); } }
@Test public void testBasic() throws Exception { Map<String, MetricPoller> pollers = new HashMap<>(); pollers.put("p1", newPoller(0)); ExecutorService exec = Executors.newFixedThreadPool(1); MetricPoller poller = new CompositeMetricPoller(pollers, exec, 10000); assertEquals(poller.poll(MATCH_ALL), mkList()); }
public static Metric getOSMetric(String name) throws Exception { MetricPoller poller = new JmxMetricPoller(new LocalJmxConnector(), new ObjectName("java.lang:type=OperatingSystem"), MATCH_NONE); RegexMetricFilter filter = new RegexMetricFilter(null, Pattern.compile(name), false, false); List<Metric> metrics = poller.poll(filter); assertEquals(metrics.size(), 1); return metrics.get(0); } }
@Test public void testFilterTrue() throws Exception { MetricPoller poller = newPoller(); assertEquals(poller.poll(new BasicMetricFilter(true)), mkList()); } }
@Test public void testException() throws Exception { MockMetricPoller mock = new MockMetricPoller(); mock.setDie(true); Map<String, MetricPoller> pollers = new HashMap<>(); pollers.put("p1", mock); pollers.put("p2", newPoller(0)); ExecutorService exec = Executors.newFixedThreadPool(1); MetricPoller poller = new CompositeMetricPoller(pollers, exec, 10000); assertEquals(poller.poll(MATCH_ALL), mkList()); } }
@Test public void testDefaultTags() throws Exception { MetricPoller poller = new JmxMetricPoller( new LocalJmxConnector(), Collections.singletonList(new ObjectName("java.lang:type=OperatingSystem")), MATCH_ALL, true, Collections.singletonList(Tags.newTag("HostName", "localhost"))); List<Metric> metrics = poller.poll(MATCH_ALL); for (Metric m : metrics) { Map<String, String> tags = m.getConfig().getTags().asMap(); assertEquals(tags.get("HostName"), "localhost"); } }
@Test public void testMultiple() throws Exception { Map<String, MetricPoller> pollers = new HashMap<>(); pollers.put("p1", newPoller(0)); pollers.put("p2", newPoller(0)); ExecutorService exec = Executors.newFixedThreadPool(1); MetricPoller poller = new CompositeMetricPoller(pollers, exec, 10000); assertEquals(poller.poll(MATCH_ALL), UnmodifiableList.copyOf(Iterables.concat(mkList(), mkList()))); }
@Test public void testTimeout() throws Exception { // Note: java8 changes the hashing/traversal order so you can see slightly different // behavior if there is a bug. In particular before we were cancelling the future on // timeout, then if the p2 key times out it will fail on java7 and pass on java8. // If the p1 key times out the opposite. Map<String, MetricPoller> pollers = new HashMap<>(); pollers.put("p1", newPoller(120000)); pollers.put("p2", newPoller(0)); // To make it fail regardless of jdk version if there is an issue pollers.put("p3", newPoller(120000)); pollers.put("p4", newPoller(120000)); pollers.put("p5", newPoller(120000)); ExecutorService exec = Executors.newFixedThreadPool(1); MetricPoller poller = new CompositeMetricPoller(pollers, exec, 500); assertEquals(poller.poll(MATCH_ALL), mkList()); }
@Test public void testNonNumericMetrics() throws Exception { MapMXBean mapMXBean = new MapMXBean(); try { MetricPoller poller = new JmxMetricPoller( new LocalJmxConnector(), Collections.singletonList(new ObjectName("com.netflix.servo.test:*")), MATCH_ALL, false, null); List<Metric> metrics = poller.poll(config -> config.getName().equals("StringValue")); assertEquals(metrics.size(), 1); assertEquals(metrics.get(0).getValue(), "AStringResult"); } finally { mapMXBean.destroy(); } } }
@Test public void testBasic() throws Exception { MonitorRegistry registry = new BasicMonitorRegistry(); registry.register(Monitors.newCounter("test")); MetricPoller poller = new MonitorRegistryMetricPoller(registry); Metric metric = poller.poll(MATCH_ALL).get(0); MonitorConfig expected = MonitorConfig.builder("test") .withTag(DataSourceType.COUNTER) .build(); assertEquals(metric.getConfig(), expected); }
@Test public void testSlowMonitor() throws Exception { MonitorRegistry registry = new BasicMonitorRegistry(); registry.register(new SlowCounter("slow")); registry.register(Monitors.newCounter("test")); MetricPoller poller = new MonitorRegistryMetricPoller(registry); long start = System.currentTimeMillis(); Metric metric = poller.poll(MATCH_ALL).get(0); long end = System.currentTimeMillis(); // Verify we didn't wait too long, we should only wait 1 second but allow up to // 10 to make it less likely to have spurious test failures assertTrue(end - start < TEN_SECONDS); MonitorConfig expected = MonitorConfig.builder("test") .withTag(DataSourceType.COUNTER) .build(); assertEquals(metric.getConfig(), expected); }